پروتکلهای اینترنتی به عنوان مهمترین و پرکاربردترین استاندارد برای تبادل اطلاعات در شبکههای اینترنتی شناخته میشوند. پروتکل HTTP یا Hyper Text Transfer Protocol یکی از استانداردهای پرکاربرد تعریف شده برای شبکههای اینترنتی است که مدتی بعد از ساخت اولین سایتها ایجاد شد. این استاندارد به تدریج توسعه پیدا کرد و کنسرسیوم جهانی وب (W3C) وظیفه توسعه و نظارت این پروتکل را بر عهده گرفت. در ادامه این مطلب با این پروتکل بیشتر آشنا خواهیم شد.
پروتکل Http چیست؟
در گذشته، روشی استاندارد برای تبادل اطلاعات در شبکه اینترنت وجود نداشت. به همین دلیل، تیم برنرز لی (Tim Berners-Lee) در سال 1991 پروتکل HTTP را با هدف ایجاد یک استاندارد برای تبادل اطلاعات در شبکه اینترنت معرفی کرد. برنرز لی این پروتکل را همراه با ساختار اولیه HTML در یک وب سرور ساده و یک مرورگر مبتنی بر متن ارائه داد. این اقدام نقطه عطفی در تاریخچه اینترنت بود که به تدریج به شکلگیری و توسعه وب جهانی منجر شد.
HTTP مخفف عبارت Hyper Text Transfer Protocol است که به معنای “پروتکل انتقال ابرمتن” میباشد. HTTP امکان ایجاد صفحات وب و سایتهای اینترنتی را فراهم کرد و به توسعه وب جهانی کمک شایانی نمود.
وظیفه HTTP برقراری ارتباط بین سرور و کلاینت در یک شبکه کامپیوتری است. سرور (Server) به عنوان میزبان، اطلاعات و محتوای مورد نیاز را نگهداری میکند و کلاینت (Client) به عنوان درخواستکننده، این اطلاعات را از سرور دریافت میکند. این ارتباط از طریق ارسال درخواستها (Requests) و دریافت پاسخها (Responses) انجام میشود.
به عبارت دیگر، پروتکل HTTP مسئولیت برقراری ارتباط بین سرویسدهندگان و سرویسگیرندگان وب را بر عهده دارد. زمانی که یک کاربر آدرس یک وبسایت را در مرورگر خود وارد میکند، مرورگر به عنوان کلاینت یک درخواست HTTP به سرور ارسال میکند. سرور نیز پس از دریافت درخواست، اطلاعات مورد نیاز را در قالب پاسخ HTTP به مرورگر ارسال میکند. این اطلاعات میتوانند شامل متن، تصاویر، ویدئوها و دیگر انواع محتوا باشند.
پروتکل HTTP به مرور زمان تکامل یافته و نسخههای جدیدتری از آن معرفی شدهاند که قابلیتها و امنیت بیشتری را فراهم میکنند. از جمله نسخههای جدیدتر میتوان به HTTP/2 و HTTP/3 اشاره کرد که بهبودهای قابل توجهی در عملکرد و امنیت ارتباطات اینترنتی ایجاد کردهاند.
با استفاده از پروتکل HTTP، امکان دسترسی به اطلاعات و منابع وب بهسادگی و با سرعت بالا فراهم شده است. این پروتکل یکی از ارکان اصلی وب جهانی محسوب میشود و نقش بسیار مهمی در تبادل اطلاعات در سطح اینترنت ایفا میکند.
منظور از Hypertext یا ابرمتن چیست؟
Hypertext یا ابرمتن به نوعی از متن اشاره دارد که فراتر از متن معمولی است و شامل لینکهایی (پیوندها) به سایر متون یا منابع میشود. این لینکها به کاربران اجازه میدهند تا با کلیک کردن بر روی آنها به صفحات یا اسناد دیگری هدایت شوند. ابرمتن اساس و پایه وب جهانی (World Wide Web) است و باعث میشود اطلاعات به صورت پیوسته و متصل به یکدیگر ارائه شوند.
ویژگیهای ابرمتن عبارتند از:
- لینکهای قابل کلیک: ابرمتن شامل لینکهایی است که به منابع دیگر اشاره میکنند. این لینکها میتوانند به صفحات وب دیگر، تصاویر، ویدئوها، فایلهای صوتی یا هر نوع محتوای دیگری منتهی شوند.
- ساختار شبکهای اطلاعات: ابرمتن اطلاعات را به صورت شبکهای سازماندهی میکند، بهگونهای که کاربران میتوانند از یک موضوع به موضوعات مرتبط دیگر بروند و به سادگی میان منابع مختلف جابجا شوند.
- تسهیل دسترسی به اطلاعات: ابرمتن به کاربران این امکان را میدهد که به سرعت به اطلاعات مورد نیاز خود دسترسی پیدا کنند و از منابع متنوعی بهرهمند شوند.
- پشتیبانی از انواع محتوا: ابرمتن میتواند شامل متن، تصاویر، ویدئوها، و انواع دیگر محتوا باشد که همه اینها را میتوان در یک صفحه وب ترکیب کرد.
به طور خلاصه، Hypertext یا ابرمتن ابزاری قدرتمند برای سازماندهی و دسترسی به اطلاعات در وب است و باعث شده تا وب جهانی به یک منبع غنی و متنوع از اطلاعات تبدیل شود.
پروتکل Http چگونه کار میکند؟
پروتکل HTTP (Hyper Text Transfer Protocol) یکی از پروتکلهای اصلی و پرکاربرد در اینترنت است که به منظور انتقال اطلاعات و محتوای وب بین سرور و کلاینت استفاده میشود. نحوه کار این پروتکل به شرح زیر است:
1. ارسال درخواست (Request)
هنگامی که یک کاربر آدرس یک وبسایت را در مرورگر خود وارد میکند یا بر روی لینکی کلیک میکند، مرورگر یک درخواست HTTP به سرور مربوطه ارسال میکند. این درخواست شامل اجزای مختلفی است:
- روش (Method): نوع عملیاتی که باید انجام شود. معمولاً از روشهای GET (برای دریافت اطلاعات) و POST (برای ارسال اطلاعات) استفاده میشود.
- آدرس (URL): مسیر دقیق صفحه یا منبعی که کاربر درخواست کرده است.
- نسخه پروتکل (HTTP Version): نسخه پروتکل HTTP که استفاده میشود (مثلاً HTTP/1.1 یا HTTP/2).
- سرآیندها (Headers): اطلاعات اضافی درباره درخواست، مانند نوع مرورگر، نوع محتوا و کوکیها.
- بدنه (Body): دادههایی که در صورت استفاده از روشهایی مانند POST ارسال میشوند (مثل اطلاعات فرمها).
2. پردازش درخواست در سرور
پس از دریافت درخواست، سرور آن را پردازش میکند. این پردازش ممکن است شامل مراحل مختلفی باشد، مانند:
- احراز هویت (Authentication): بررسی هویت کاربر و اطمینان از دسترسی مجاز به منابع.
- تولید پاسخ (Generating Response): در صورت درخواست برای صفحات دینامیک، سرور ممکن است نیاز به اجرای کدها یا کوئریهای پایگاه داده برای تولید محتوای مورد نیاز داشته باشد.
- ارسال فایلها (Serving Files): در صورت درخواست برای فایلهای استاتیک (مانند تصاویر یا فایلهای CSS)، سرور این فایلها را به کلاینت ارسال میکند.
3. ارسال پاسخ (Response)
پس از پردازش درخواست، سرور یک پاسخ HTTP به مرورگر ارسال میکند. این پاسخ نیز شامل اجزای مختلفی است:
- وضعیت (Status Line): شامل کد وضعیت (Status Code) که نشاندهنده نتیجه درخواست است (مانند 200 برای موفقیت، 404 برای یافت نشدن صفحه و 500 برای خطای سرور).
- سرآیندها (Headers): اطلاعات اضافی درباره پاسخ، مانند نوع محتوا (Content-Type)، طول محتوا (Content-Length) و اطلاعات مربوط به کشینگ (Caching).
- بدنه (Body): محتوای درخواستی که میتواند شامل HTML، تصاویر، فایلهای JSON و غیره باشد.
4. نمایش محتوا در مرورگر
مرورگر پس از دریافت پاسخ HTTP، محتوای دریافت شده را پردازش و نمایش میدهد. اگر محتوای دریافت شده شامل منابع دیگری باشد (مانند تصاویر، CSS، جاوااسکریپت)، مرورگر به صورت خودکار درخواستهای جدیدی برای این منابع به سرور ارسال میکند و فرآیند دریافت و نمایش آنها را ادامه میدهد.
مثال کاربردی:
فرض کنید یک کاربر آدرس http://www.example.com
را در مرورگر خود وارد میکند:
- مرورگر یک درخواست HTTP GET به سرور
www.example.com
در مسیر/
ارسال میکند. - سرور درخواست را دریافت کرده و صفحه اصلی وبسایت (مثلاً
index.html
) را به عنوان پاسخ HTTP با کد وضعیت 200 (موفقیت) ارسال میکند. - مرورگر محتوای HTML را دریافت و پردازش میکند. اگر در HTML لینکهایی به فایلهای CSS یا تصاویر وجود داشته باشد، مرورگر درخواستهای HTTP جدیدی برای هر یک از این منابع ارسال میکند.
- سرور این درخواستهای جدید را پردازش و پاسخهای مربوطه را ارسال میکند.
- مرورگر پس از دریافت تمامی منابع، آنها را ترکیب کرده و صفحه وب را به کاربر نمایش میدهد.
پروتکل HTTP به مرور زمان تکامل یافته و نسخههای جدیدتری مانند HTTP/2 و HTTP/3 معرفی شدهاند که بهبودهای قابل توجهی در عملکرد و امنیت ارتباطات اینترنتی ایجاد کردهاند. HTTP/2 با کاهش تعداد درخواستهای مجزا و بهبود مدیریت کانکشنها، عملکرد بهتری ارائه میدهد، در حالی که HTTP/3 با استفاده از پروتکل QUIC بر پایه UDP، سرعت و امنیت ارتباطات را بهبود میبخشد.
روشهای درخواست در پروتکل http
پروتکل HTTP از روشهای مختلفی برای ارسال درخواستها استفاده میکند که هر یک از این روشها هدف خاصی را دنبال میکنند. مهمترین روشهای درخواست در پروتکل HTTP عبارتند از:
1. GET
- هدف: دریافت داده از سرور.
- استفاده: برای درخواست صفحات وب و بازیابی دادهها از سرور.
- ویژگیها:
- اطلاعات درخواست در URL ارسال میشود.
- دادههای حساس نباید با GET ارسال شوند چون در URL قابل مشاهدهاند.
- درخواستهای GET به طور پیشفرض ایمن و ایمن شده (Idempotent) هستند، یعنی چند بار ارسال آنها نتایج مشابهی دارد.
2. POST
- هدف: ارسال داده به سرور.
- استفاده: برای ارسال فرمها، آپلود فایلها، و ارسال دادههای حساس.
- ویژگیها:
- اطلاعات درخواست در بدنه (body) ارسال میشود.
- میتواند دادههای بزرگ و حساس را به سرور ارسال کند.
- نتایج درخواست POST میتواند متفاوت باشد (غیر ایمن).
3. PUT
- هدف: بارگذاری دادهها بر روی سرور.
- استفاده: برای آپلود و بهروزرسانی کامل منابع موجود در سرور.
- ویژگیها:
- تمام دادهها در بدنه درخواست ارسال میشود.
- ایمن است، یعنی چند بار ارسال آن نتایج مشابهی دارد.
4. DELETE
- هدف: حذف یک منبع موجود در سرور.
- استفاده: برای حذف منابع مشخص شده.
- ویژگیها:
- درخواست DELETE نیز ایمن است.
5. HEAD
- هدف: دریافت سرآیندهای یک منبع بدون بدنه.
- استفاده: برای بررسی وضعیت و اطلاعات کلی یک منبع بدون دریافت محتوای آن.
- ویژگیها:
- فقط سرآیندها برگردانده میشوند.
- به طور معمول برای اهداف اطلاعاتی و تست استفاده میشود.
6. PATCH
- هدف: بهروزرسانی جزئی یک منبع.
- استفاده: برای اعمال تغییرات جزئی در منبع.
- ویژگیها:
- فقط تغییرات لازم در بدنه درخواست ارسال میشود.
- متفاوت از PUT که برای بهروزرسانی کامل استفاده میشود.
7. OPTIONS
- هدف: بازیابی قابلیتهای ارتباطی با سرور.
- استفاده: برای دریافت اطلاعاتی درباره روشهای پشتیبانی شده توسط سرور.
- ویژگیها:
- سرور روشهای پشتیبانی شده برای یک URL مشخص یا برای کل سرور را برمیگرداند.
8. TRACE
- هدف: تست و اشکالزدایی مسیر درخواست.
- استفاده: برای بررسی مسیر رسیدن درخواست به سرور.
- ویژگیها:
- بدنه درخواست اصلی در پاسخ برگردانده میشود.
- به طور معمول برای تست و اشکالزدایی استفاده میشود.
هر یک از این روشها برای هدف خاصی طراحی شده و در موارد متفاوتی به کار میروند. انتخاب روش مناسب به نیاز و نوع عملیاتی که میخواهید انجام دهید بستگی دارد.
ساختار Responseها و Requestها در Http
در پروتکل HTTP، ساختار درخواستها (Requests) و پاسخها (Responses) از اجزای مشخصی تشکیل شدهاند که به تبادل اطلاعات بین کلاینت و سرور کمک میکنند. در ادامه، ساختار هر یک از این پیامها به صورت کامل توضیح داده میشود.
ساختار Request
درخواست HTTP شامل سه بخش اصلی است: خط درخواست (Request Line)، سرآیندها (Headers) و بدنه (Body).
1. خط درخواست (Request Line)
خط درخواست شامل سه قسمت است:
- روش (Method): نوع عملیات مورد نظر (مانند GET، POST، PUT، DELETE).
- آدرس (URL): آدرس منبع مورد نظر.
- نسخه پروتکل (HTTP Version): نسخه پروتکل HTTP (مثلاً HTTP/1.1).
مثال:
GET /index.html HTTP/1.1
2. سرآیندها (Headers)
سرآیندها اطلاعات اضافی درباره درخواست را شامل میشوند و به صورت جفتهای کلید-مقدار قرار دارند. هر سرآیند در یک خط جدید نوشته میشود.
مثال:
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9
3. بدنه (Body)
بدنه شامل دادههای اضافی است که در درخواستهای POST، PUT و PATCH استفاده میشود. در درخواستهای GET معمولاً بدنهای وجود ندارد.
مثال:
name=John&age=30
نمونه کامل درخواست HTTP:
POST /submit-form HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9
Content-Type: application/x-www-form-urlencoded
Content-Length: 19
name=John&age=30
ساختار Response
پاسخ HTTP نیز شامل سه بخش اصلی است: خط وضعیت (Status Line)، سرآیندها (Headers) و بدنه (Body).
1. خط وضعیت (Status Line)
خط وضعیت شامل سه قسمت است:
- نسخه پروتکل (HTTP Version): نسخه پروتکل HTTP (مثلاً HTTP/1.1).
- کد وضعیت (Status Code): عددی که نشاندهنده نتیجه درخواست است (مثلاً 200 برای موفقیت، 404 برای یافت نشدن).
- متن وضعیت (Status Text): توضیح مختصری درباره وضعیت (مثلاً OK برای 200، Not Found برای 404).
مثال:
HTTP/1.1 200 OK
2. سرآیندها (Headers)
سرآیندها اطلاعات اضافی درباره پاسخ را شامل میشوند و به صورت جفتهای کلید-مقدار قرار دارند. هر سرآیند در یک خط جدید نوشته میشود.
مثال:
Content-Type: text/html; charset=UTF-8
Content-Length: 138
3. بدنه (Body)
بدنه شامل دادههایی است که سرور به کلاینت ارسال میکند. این دادهها میتوانند شامل HTML، JSON، تصاویر و غیره باشند.
مثال:
<html>
<head>
<title>Example</title>
</head>
<body>
<h1>Hello, World!</h1>
</body>
</html>
نمونه کامل پاسخ HTTP:
HTTP/1.1 200 OK
Date: Mon, 27 Jun 2024 12:28:53 GMT
Server: Apache/2.4.1 (Unix)
Last-Modified: Tue, 15 Nov 2022 12:45:26 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 138
<html>
<head>
<title>Example</title>
</head>
<body>
<h1>Hello, World!</h1>
</body>
</html>
کدهای وضعیت HTTP:
پاسخهای HTTP با استفاده از کدهای وضعیت، وضعیت درخواستها را نشان میدهند. برخی از رایجترین کدهای وضعیت عبارتند از:
- 2xx: موفقیت
- 200 OK: درخواست موفقیتآمیز بود.
- 201 Created: منبع جدید با موفقیت ایجاد شد.
- 3xx: تغییر مسیر
- 301 Moved Permanently: منبع به صورت دائمی به URL جدید منتقل شده است.
- 302 Found: منبع به طور موقت در URL دیگری پیدا شد.
- 4xx: خطای کلاینت
- 400 Bad Request: درخواست نادرست بود.
- 401 Unauthorized: احراز هویت لازم است.
- 403 Forbidden: دسترسی به منبع ممنوع است.
- 404 Not Found: منبع پیدا نشد.
- 5xx: خطای سرور
- 500 Internal Server Error: خطای داخلی سرور.
- 502 Bad Gateway: پاسخ نامعتبر از سرور بالادستی.
- 503 Service Unavailable: سرور در دسترس نیست.
ساختار دقیق و جامع درخواستها و پاسخهای HTTP امکان تبادل موثر و منظم اطلاعات بین کلاینتها و سرورها را فراهم میکند.