پروتکل انتقال ابرمتن: تفاوت میان نسخهها
محتوای حذفشده محتوای افزودهشده
FreshmanBot (بحث | مشارکتها) جز اصلاح فاصله مجازی + اصلاح نویسه با استفاده از AWB |
|||
خط ۱:
{{پشته پروتکل اینترنت}}
'''منشور انتقال ابرمتن''' {{به انگلیسی|Hypertext Transfer Protocol}} {{مخفف انگلیسی|HTTP}} یک [[قرارداد (رایانه)|پروتکل]] [[لایه کاربرد|لایهٔ کاربرد (Application Layer)]] برای [[رایانش توزیعشده|سیستمهای توزیع شده]] میباشد. این پروتکل عمومی علاوه بر استفاده اصلی آن در [[ابرمتن
گسترش این پروتکل بر عهدهٔ [[نیروی ضربت مهندسی اینترنت]] (IETF) و [[کنسرسیوم وب جهانشمول]] (W3C)
== تاریخچه ==
خط ۸:
[[تیم برنرز لی]]، طراح و پیشنهاد دهنده [[وب جهانی]] که اکنون تحت عنوان WWW شناخته میشود، برای اولین بار پروتکل انتقال ابرمتن را به همراه ساختار اولیهٔ [[اچتیامال|زبان نشانهگذاری ابرمتن (HTML)]] در یک [[وب سرور]] ساده و یک [[مرورگر]] مبتنی بر متن ارائه داد. در این نسخهٔ اولیه تنها روش درخواست (Request Method) موجود GET و تمامی پاسخها به زبان HTML بودند.<ref name="first_http">{{یادکرد وب |نویسنده = |نشانی= http://www.w3.org/Protocols/HTTP/AsImplemented.html |عنوان= نسخهٔ اولیهٔ HTTP| ناشر = [[کنسرسیوم وب جهانشمول|کنسرسیوم وب]]|تاریخ = |تاریخ بازبینی=}}</ref>
اولین نسخهٔ مستند پروتکل انتقال ابرمتن نسخهٔ ۰٫۹ آن بود که در سال ۱۹۹۱ منتشر شد.<ref name="first_http" /> [[دیو راگت]]، که در سال ۱۹۹۵ [[گروه کاری پروتکل انتقال ابرمتن]] (HTTP Working Group) را رهبری میکرد، خواستار گسترش این پروتکل شد و نهایتاً نسخه ۱٫۰ تحت عنوان «HTTP/1.0» در سال ۱۹۹۶ به صورت رسمی معرفی شد.<ref>{{یادکرد وب |نویسنده = |نشانی= http://www.w3.org/People/Raggett/profile.html|عنوان= زندگینامهٔ دیو راگر | ناشر = |تاریخ = |تاریخ بازبینی=}}</ref><ref>{{یادکرد وب |نویسنده = |نشانی= http://www.w3.org/Arena/webworld/httpwgplans.html|عنوان= برنامهریزی گروه کاری HTTP در سال ۱۹۹۵ | ناشر = |تاریخ = |تاریخ بازبینی=}}</ref>
گروه کاری این پروتکل در ژانویه سال ۱۹۹۷ اولین استاندارد نسخهٔ ۱٫۱ را که در همان زمان توسط بسیاری از [[مرورگر
== ساختار کلی ==
پروتکل انتقال ابرمتن یک پروتکل درخواست و پاسخ در مدل [[مدل کارخواه-کارساز|کلاینت–سرور]] میباشد. برای مثال یک [[مرورگر وب]] میتواند یک ''کلاینت'' و نرمافزار موجود بر روی سرویسدهندهٔ وبسایت، یک ''سرور'' باشد. شروع این پروتکل از طرف کلاینت است که با ارسال یک درخواست HTTP به سمت سرور گفتگو را آغاز میکند. سرور بر اساس درخواست ارسالی یا منبعی مانند یک فایل را در اختیار کلاینت میگذارد یا عملیات خاصی را انجام میدهد. نتیجهٔ این عملِ سرور در بستهٔ پاسخ HTTP برای کلاینت ارسال میشود. بستهٔ پاسخ شامل اطلاعات وضعیت و احتمالاً محتویات منبع درخواست شده میباشد.
مرورگر وب یک نمونه از [[عامل کاربر]] {{به انگلیسی|User Agent}} است. از دیگر عوامل کاربر میتوان به [[
پروتکل انتقال ابرمتن یک پروتکل [[لایهٔ کاربرد]] است که در [[مجموعه پروتکل اینترنت]] طراحی شده و مورد استفاده قرار میگیرد. این پروتکل با فرض اینکه [[لایه حمل|لایهٔ حمل (Transport Layer)]] زیرین آن قابل اعتماد است طراحی شده و معمولاً از [[قرارداد هدایت انتقال|پروتکل هدایت انتقال (TCP)]] به عنوان لایهٔ زیرین استفاده میکند. با این حال از این پروتکل بر روی لایههای غیرقابل اطمینان نیز استفاده میشود. مثلاً در پروتکل SSDP، پروتکل انتقال ابرمتن بر روی [[قرارداد دادهنگار کاربر|پروتکل دادهنگار کاربر]] (یک پروتکل غیر امن) مورد استفاده قرار میگیرد.
خط ۲۱:
منابع HTTP همگی با یک [[یوآرآی|شناسانهٔ یکنواخت منبع (URI)]] یا بهطور مشخصتر با یک [[نشانی وب|نشانی وب (URL)]] آدرسدهی و مشخص میشوند. تمامی این آدرسها با نشانهٔ http یا https آغاز میگردد. از این آدرسها در [[زبان نشانهگذاری ابرمتنی|زبان نشانهگذاری ابرمتن]] به صورت گسترده برای انتقال بین صفحات مختلف استفاده میگردد و از آن تحت عنوان [[ابرپیوند|پیوند یا لینک]] یاد میشود.
نسخهٔ ۱٫۱ این پروتکل برخلاف نسخهٔ ۱٫۰ قابلیت استفاده از یک اتصال {{به انگلیسی|Connection}} برای چندین درخواست را دارد. مثلاً میتواند عکسها، فایلهای اسکریپت و … موجود در یک صفحه را با همان اتصال اولیه دریافت
== جلسه ==
در پروتکل انتقال ابرمتن به دنبالهای از درخواستها و پاسخها جلسه {{به انگلیسی|Session}} گفته میشود. کلاینت با ایجاد یک اتصال [[قرارداد هدایت انتقال|هدایت انتقال (TCP)]] بر روی یک درگاهِ از پیش تعیین شده بر روی سرور (
یک نمونه از ''خط وضعیت'' در پاسخ به یک درخواست مجاز:
خط ۳۲:
=== روشهای درخواست ===
پروتکل انتقال ابرمتن روشهایی را برای درخواست تعریف کردهاست {{به انگلیسی|Request Method}}که هر کدام از آنها باعث انجام عمل خاص در سمت سرور میشوند. نسخهٔ ۱٫۰ روشهای درخواست
در نسخهٔ ۱٫۱ پنج روش جدید افزوده شد<ref name="rfc_2616" /><sup>[بخش ۹]</sup>:
; '''GET''': درخواست نمایش منبعِ درخواستدادهشده را میدهد. (این منبع معمولاً یک [[پرونده (رایانه)|فایل یا پرونده]] میباشد
; '''HEAD''': این روش دقیقاً مانند روش GET عمل میکند ''با این تفاوت که بدنه پاسخ را نمیخواهد''. از این روش برای بهدستآوردن [[فراداده
; '''POST''': در این روش به همراه بستهٔ درخواست اطلاعاتی نیز فرستاده میشود. سرور با توجه به [[نشانی وب|نشانی وب (URL)]] درخواست شده و اطلاعات ارسال شده، منبع مورد نظر را در بستهٔ پاسخ برمیگرداند. این اطلاعات ارسالی میتواند نامِکاربری و کلمهٔعبور، یک نظر بر روی یک مطلب یا اطلاعات هر فرم دیگری که توسط کاربر وارد
; '''PUT''': در این روش منبعی به همراه بستهٔ درخواست ارسال شده و از سرور تقاضا میشود که این منبع را در [[یوآرآی|آدرس]] موجود در بسته [[بارگذاری]] کند. اگر در محلِ درخواست شده قبلاً منبع دیگری قرار داشته باشد، منبع جدید جایگزین خواهد شد.
; '''DELETE''': از سرور درخواست میکند که [[یوآرآی|آدرس]] فرستاده شده را حذف نماید.
; '''TRACE''': در این روش سرور اطلاعات ارسال شده را ''عیناً'' به کلاینت
; '''OPTIONS''': از سرور تقاضا میکند تا روشهای درخواستِ {{به انگلیسی|Request Method}} موجود برای [[نشانی وب|نشانی]] فرستاده شده را اعلام نماید. برای گرفتن تمامی روشهای درخواست قابل اجرا بر روی سرور میتوان از نشانی '*' استفاده کرد.
; '''CONNECT''': بستهٔ پروتکل ابرمتن را به یک تونل TCP/IP تبدیل میکند. این عمل معمولاً برای برقراری ارتباط امن ([[پروتکل امن انتقال ابرمتن|HTTPS]]) بر روی یک [[پراکسی سرور]] ناامن استفاده میشود.<ref>{{یادکرد وب |نویسنده = |نشانی= http://tools.ietf.org/html/rfc2817|عنوان= RFC 2817 - Upgrading to TLS Within HTTP/1.1"| ناشر = [[نیروی ضربت مهندسی اینترنت]]|تاریخ= سال ۲۰۰۰}}</ref>
; '''PATCH''': این روش که در سال ۲۰۱۰ به پروتکل افزوده شد، برای ایجاد تغییرات جزیی بر روی منابع استفاده میشود.<ref name="rfc_5789" />
سرورهای وب موظف هستند حداقل روشهای GET و HEAD را پیادهسازی نمایند.<ref name="rfc_2616" /><sup>[بخش ۵٫۱٫۱]</sup>
=== وضعیت جلسه ===
خط ۵۴:
== کدهای وضعیت ==
از نسخهٔ ۱٫۰ پروتکل انتقال ابرمتن به بعد، خطِ اولِ پاسخِ سرور تحت عنوان ''خط وضعیت'' شناخته شدهاست. این خط حاوی یک کد عددی (مانند ۴۰۴) که به عنوان ''کد وضعیت'' شناخته میشود و یک پیام متنی (مانند "یافت نشد" یا "Not Found") که با عنوان ''علت وضعیت'' شناخته میشود، میباشد. نحوهٔ برخورد [[عامل کاربر]] با پاسخ، بستگی کامل به کد وضعیت و فیلدهای سرآیند بستهٔ پاسخ دارد. با این حال استفاده از کدهای سفارشی (که در پروتکل اصلی موجود نیستند) نیز بلامانع میباشد. زیرا عوامل کاربر در برخورد با کدهای تعریف نشده، از رقم اول عدد آنها برای شناسایی نوع کلی کد استفاده میکنند.<ref name="rfc_2616" /><sup>[بخش ۶٫۱]</sup>
کدهای وضعیت پروتکل انتقال ابرمتن به ۵ دستهٔ کلی تقسیم میشوند:
* کدهای 1xx یا اطلاعاتی: این کدها با عدد ۱ آغاز میشوند. این گروه، این پیام کلی را مشخص میکنند: «''درخواست شما دریافت شد، ادامه دهید''».
* کدهای 2xx یا موفقیت: این کدها با عدد ۲ آغاز میشوند. یعنی «''درخواستِ ارسالی دریافت شده، درک شده، پذیرفته شده و با موفقیت انجام
* کدهای 3xx یا تغییر مسیر: این کدها با عدد ۳ آغاز میشوند. یعنی «''کلاینت برای کامل شدن درخواست نیازمند انجام عملیات اضافی است''».
* کدهای 4xx یا خطای کلاینت: این کدها با عدد ۴ آغاز میشوند. این گروه از کدها مشخص میکنند که «''کلاینت در درخواست خود اشتباه کرده یا باعث بروز خطا
* کدهای 5xx یا خطای سرور: این کدها با عدد ۵ آغاز میشوند. با این مفهوم که «''سرور در انجام عملیات مربوط به یک بستهٔ درخواستِ ظاهراً صحیح، ناموفق بوده و با خطا مواجه
''علت وضعیت''هایی که در متن تعریف پروتکل آمدهاند پیشنهادی بوده و میتوانند با متون دیگر، به صلاحِ دید [[توسعه دهنده]]، تغییر پیدا کنند. این عبارت میتواند توسط [[عامل کاربر]] به عنوان توضیحات اضافی به کاربر نمایش داده شود.
خط ۶۷:
== مثال ==
در زیر مثالی از یک [[#جلسه|جلسه]] بین یک کلاینت HTTP و یک سرور HTTP که بر روی www.wikipedia.com قرار دارد، ارائه شدهاست.
=== درخواست کلاینت ===
{{چپچین}}
سطر ۷۷ ⟵ ۷۸:
{{چپچین}}
HTTP/1.1 200 OK
Date: Mon,
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
Last-Modified: Wed,
Content-Type: text/html; charset=UTF-8
Content-Length: 131
سطر ۸۶ ⟵ ۸۷:
<html>
<head>
</head>
<body>
</body>
</html>
سطر ۱۰۴ ⟵ ۱۰۵:
== منابع ==
* {{یادکرد ویکی|عنوان = Hypertext Transfer Protocol |پیوند = http://en.wikipedia.org/wiki/HTTP |زبان = انگلیسی | بازیابی =۳۰ فروردین ۱۳۹۲}}
* {{یادکرد وب |نویسنده = |نشانی= http://www.ietf.org/ |عنوان= وبسایت رسمی نیروی ضربت مهندسی اینترنت| ناشر = |تاریخ = |تاریخ بازبینی= ۳۰ فروردین ۱۳۹۲}}
* {{یادکرد وب |نویسنده = |نشانی= http://www.w3c.org/ |عنوان= وبسایت رسمی کنسرسیوم وب| ناشر = |تاریخ = |تاریخ بازبینی= ۳۰ فروردین ۱۳۹۲}}
== پانویس ==
{{پانویس|۲}}
|