• آنچه شما باید در مورد پروتکل HTTP به عنوان یک توسعه دهنده وب بدانید. قوانین پروتکل HTTP

    .) به دلیل توانایی تعیین نحوه رمزگذاری پیام است که مشتری و سرور می توانند داده های باینری را مبادله کنند، اگرچه این پروتکلمتن است

    سرورهای پروکسی

    تاریخ توسعه

    HTTP/0.9

    علاوه بر روش معمول GET، همچنین وجود دارد. درخواست‌های GET مشروط شامل سرصفحه‌های If-Modified-Since، If-Match، If-Range و موارد مشابه هستند. GET های جزئی شامل یک محدوده در درخواست هستند. دستور اجرا درخواست های مشابهتوسط استانداردها به طور جداگانه تعریف شده است.

    سر

    مشابه روش GET، با این تفاوت که هیچ بدنه ای در پاسخ سرور وجود ندارد. درخواست HEAD معمولاً برای بازیابی ابرداده، بررسی وجود یک منبع (اعتبارسنجی URL) و دیدن اینکه آیا از آخرین باری که به آن دسترسی داشته‌اید تغییر کرده است استفاده می‌شود.

    سرصفحه های پاسخ را می توان کش کرد. اگر ابرداده منبع با اطلاعات مربوطه در حافظه پنهان مطابقت نداشته باشد، کپی منبع به عنوان منسوخ علامت گذاری می شود.

    پست

    برای ارسال اطلاعات کاربر به یک منبع خاص استفاده می شود. به عنوان مثال در وبلاگ ها معمولا بازدیدکنندگان می توانند نظرات خود را در مورد پست ها در یک فرم HTML وارد کنند و پس از آن به روش POST به سرور ارسال می شوند و در صفحه قرار می گیرند. در این مورد، داده های ارسال شده (در مثال با وبلاگ ها، متن نظر) در بدنه درخواست گنجانده می شود. به طور مشابه، روش POST معمولا برای آپلود فایل ها در سرور استفاده می شود.

    بر خلاف روش GET، روش POST بدون قدرت، یعنی تکرار همان روش در نظر گرفته نمی شود درخواست های POSTممکن است نتایج متفاوتی را نشان دهد (به عنوان مثال، پس از ارسال هر نظر، یک نسخه از این نظر ظاهر می شود).

    اگر نتیجه 200 باشد (Ok)، بدن پاسخ باید پیامی در مورد نتیجه درخواست ارسال کند. اگر منبعی ایجاد شده باشد، سرور باید یک پاسخ 201 (ایجاد شده) را با URI منبع جدید در هدر Location برگرداند.

    پیام پاسخ سرور برای روش POST ذخیره نمی شود.

    قرار دادن

    برای دانلود محتوای درخواست در URI مشخص شده در درخواست استفاده می شود. اگر هیچ منبعی برای URI داده شده وجود نداشته باشد، سرور آن را ایجاد می کند و وضعیت 201 (ایجاد شده) را برمی گرداند. اگر منبع تغییر کرده باشد، سرور 200 (Ok) یا 204 (بدون محتوا) را برمی‌گرداند. سرور نباید هدرهای Content-* نامعتبر ارسال شده توسط مشتری همراه با پیام را نادیده بگیرد. اگر هر یک از این سرصفحه‌ها قابل شناسایی نباشد یا در شرایط فعلی معتبر نباشد، باید کد خطای 501 (عدم اجرا) برگردانده شود.

    تفاوت اساسی بین روش های POST و PUT در درک هدف URI های منبع نهفته است. روش POST فرض می کند که محتوای ارسال شده توسط مشتری در URI مشخص شده پردازش می شود. با استفاده از PUT، مشتری فرض می کند که محتوای بارگیری شده با منبع در URI داده شده مطابقت دارد.

    پیام های پاسخ سرور به روش PUT ذخیره نمی شوند.

    پچ

    مشابه PUT است، اما فقط برای یک قطعه منبع اعمال می شود.

    حذف

    منبع مشخص شده را حذف می کند.

    پی گیری

    درخواست دریافت شده را برمی گرداند تا مشتری بتواند ببیند سرورهای میانی چه اطلاعاتی را در درخواست اضافه یا اصلاح می کنند.

    ارتباط دادن

    منبع مشخص شده را با دیگران مرتبط می کند.

    لغو پیوند

    منبع مشخص شده را از سایرین جدا می کند.

    اتصال

    اتصال درخواست را به یک تونل TCP/IP شفاف تبدیل می کند، معمولاً برای تسهیل ایجاد یک امن اتصالات SSLاز طریق یک پروکسی رمزگذاری نشده

    کدهای وضعیت

    کد وضعیت بخشی از خط اول پاسخ سرور است. این یک عدد صحیح از سه عدد عربی است. رقم اول نشان دهنده کلاس وضعیت است. کد پاسخ معمولاً با یک عبارت توضیحی جدا شده با فاصله دنبال می شود زبان انگلیسی، که دلیل چنین پاسخی را برای فرد توضیح می دهد. مثال ها:

    201 صفحه وب ایجاد شد 403 دسترسی فقط برای کاربران ثبت نام شده مجاز است 507 فضای ذخیره کافی نیست

    مشتری از کد پاسخ در مورد نتایج درخواست خود می آموزد و تعیین می کند که در مرحله بعد چه اقداماتی را انجام دهد. مجموعه کدهای وضعیت یک استاندارد است و در اسناد RFC مربوطه توضیح داده شده است. معرفی کدهای جدید فقط باید پس از مشورت با IETF انجام شود. مشتری ممکن است همه کدهای وضعیت را نداند، اما باید مطابق با کلاس کد پاسخ دهد.

    در حال حاضر پنج کلاس از کدهای وضعیت وجود دارد.

    1xx اطلاعاتی (روس. اطلاعاتی)

    این کلاس حاوی کدهایی است که در مورد فرآیند انتقال اطلاعات می دهد. در HTTP/1.0، پیام های دارای این کدها باید نادیده گرفته شوند. در HTTP/1.1، کلاینت باید آمادگی پذیرش این کلاس پیام را به عنوان یک پاسخ عادی داشته باشد، اما نیازی به ارسال چیزی به سرور نیست. پیام های خود سرور فقط شامل خط شروعپاسخ و در صورت نیاز، چندین فیلد سرصفحه مخصوص پاسخ. سرورهای پروکسی باید چنین پیام هایی را بیشتر از سرور به مشتری ارسال کنند.

    2xx موفقیت (روس. موفقیت)

    پیام ها این کلاساز موارد پذیرش و رسیدگی موفقیت آمیز به درخواست مشتری اطلاع دهید. بسته به وضعیت، سرور همچنین ممکن است سرصفحه و متن پیام ارسال کند.

    3xx تغییر مسیر (روس. تغییر مسیر )

    کدهای کلاس 3xx به مشتری می‌گویند که برای تکمیل موفقیت‌آمیز عملیات باید درخواست دیگری (معمولاً توسط یک URI دیگر) ارسال شود. از این کلاس، پنج کد، , و به طور مستقیم به تغییر مسیرها (redirect) اشاره می کنند. آدرسی که مشتری باید به آن درخواست بدهد توسط سرور در هدر Location مشخص شده است. این اجازه می دهد تا قطعات در URI هدف استفاده شوند.

    خطای مشتری 4xx (روس. خطای مشتری)

    کلاس کد 4xx برای نشان دادن خطاها در سمت مشتری در نظر گرفته شده است. هنگام استفاده از همه روش ها به جز HEAD، سرور باید توضیحی فرامتنی را برای کاربر در متن پیام بازگرداند.

    برای به خاطر سپردن مقادیر کدهای 400 تا 417، روش‌هایی برای یادگاری مصور وجود دارد.

    خطای سرور 5xx (روس. خطای سرور)

    کدهای 5xx برای موارد عملکرد ناموفق به دلیل خطای سرور اختصاص داده می شود. برای همه موقعیت‌های غیر از استفاده از روش HEAD، سرور باید توضیحی را در متن پیامی که مشتری به کاربر نمایش می‌دهد، اضافه کند.

    عناوین

    بدنه ی پیام

    بدنه پیام HTTP (متن پیام)، در صورت وجود، برای انتقال بدنه شی مرتبط با درخواست یا پاسخ استفاده می شود. بدنه پیام (متن پیام) با بدنه موجودیت (نهاد-بدنه) تنها زمانی متفاوت است که رمزگذاری انتقال اعمال شود، همانطور که با فیلد هدر Transfer-Encoding نشان داده شده است.

    پیام - بدن = نهاد - بدن |

    فیلد Transfer-Encoding باید برای نشان دادن هر گونه رمزگذاری انتقال اعمال شده توسط برنامه مورد استفاده قرار گیرد تا اطمینان حاصل شود که پیام به طور ایمن و صحیح منتقل می شود. فیلد Transfer-Encoding یک ویژگی پیام است، نه یک شی، و بنابراین می تواند توسط هر برنامه کاربردی در زنجیره درخواست/پاسخ اضافه یا حذف شود.

    قوانین حاکم بر اعتبار یک بدنه پیام در یک پیام برای درخواست ها و پاسخ ها متفاوت است.

    وجود یک متن پیام در یک درخواست با افزودن فیلد هدر Content-Length یا Transfer-Encoding به سرصفحه های درخواست نشان داده می شود. یک متن پیام (متن پیام) ممکن است تنها زمانی به درخواست اضافه شود که روش درخواست اجازه یک نهاد-بدن را بدهد.

    اینکه بدنه پیام در پیام پاسخ گنجانده شود یا نه بستگی به روش درخواست و کد وضعیت پاسخ دارد. تمام پاسخ‌ها به یک درخواست با روش HEAD نباید شامل بدنه پیام (پیام-بدنه) باشد، حتی اگر فیلدهای هدر موجودیت وجود داشته باشد تا به نظر برسد که موجودیت موجود است. هیچ پاسخی با کد وضعیت 1xx (اطلاعاتی)، 204 (بدون محتوا) و 304 (تغییر نشده) نباید حاوی متن پیام باشد. تمام پاسخ های دیگر حاوی یک متن پیام هستند، حتی اگر طول آن صفر باشد.

    نمونه هایی از دیالوگ های HTTP

    درخواست GET منظم

    دو نوع اصلی توافق وجود دارد:

    • سرور مدیریت شد. سرور محور).
    • توسط مشتری مدیریت می شود عامل رانده).

    هر دو نوع را می توان به طور همزمان یا هر یک از آنها را جداگانه استفاده کرد.

    مشخصات پروتکل اصلی (RFC 2616) همچنین به اصطلاح مذاکره شفاف (Eng. مذاکره شفاف) به عنوان ترکیب ترجیحی هر دو نوع. مکانیسم دوم نباید با فناوری مستقل مذاکره محتوای شفاف (TCN) اشتباه گرفته شود. مذاکره محتوای شفاف ، RFC 2295 را ببینید)، که بخشی از پروتکل HTTP نیست، اما می تواند با آن استفاده شود. هر دو تفاوت قابل توجهی در اصل عملکرد و معنای کلمه "شفاف" (شفاف) دارند. در مشخصات HTTP، شفافیت به این معنی است که فرآیند برای مشتری و سرور قابل مشاهده نیست، در حالی که در فناوری TCN، شفافیت به معنای در دسترس بودن است. لیست کاملگزینه های منبع برای همه شرکت کنندگان در فرآیند تحویل داده ها.

    مدیریت سرور

    اگر چندین نسخه از یک منبع وجود داشته باشد، سرور می‌تواند سرصفحه‌های درخواست مشتری را تجزیه کند تا آنچه را که فکر می‌کند بهترین است، بازگرداند. هدرهای تجزیه شده عبارتند از Accept، Accept-Charset، Accept-Encoding، Accept-Languages ​​و User-Agent. برای سرور مطلوب است که یک هدر Vary در پاسخ قرار دهد که پارامترهایی را که محتوا توسط URI درخواستی متمایز می شود را نشان می دهد.

    موقعیت جغرافیایی مشتری را می توان از آدرس IP راه دور تعیین کرد. این به دلیل این واقعیت است که آدرس های IP، مانند نام دامنه، در آن ثبت شده است شخص خاصیا سازمان هنگام ثبت نام، منطقه ای را که در آن از فضای آدرس مورد نظر استفاده می شود، مشخص می کنید. این داده‌ها به صورت عمومی در دسترس هستند و در اینترنت می‌توانید پایگاه‌های داده آزادانه و آماده مربوطه را پیدا کنید. ماژول های نرم افزاریبرای کار با آنها (باید روی کلید واژه ها"GeoIP").

    لازم به یادآوری است که این روش قادر به تعیین مکان با حداکثر دقت شهر است (از اینجا کشور مشخص می شود). در این صورت، اطلاعات فقط در زمان ثبت نام فضای آدرس مرتبط است. برای مثال، اگر یک ارائه‌دهنده مسکو طیفی از آدرس‌ها را ثبت کند که نشان‌دهنده مسکو است و شروع به ارائه دسترسی به مشتریان از نزدیک‌ترین حومه‌ها کند، ممکن است مشترکانش در برخی از سایت‌ها مشاهده کنند که از مسکو هستند و نه از کراسنوگورسک یا دزرژینسکی.

    مذاکره مدیریت شده توسط سرور چندین معایب دارد:

    • سرور فقط فرض می کند که کدام گزینه بیشتر ترجیح داده می شود کاربر نهایی، اما نمی توان دقیقاً بداند که در چه چیزی مورد نیاز است این لحظه(به عنوان مثال، یک نسخه به زبان روسی یا انگلیسی).
    • تعداد زیادی هدر گروه Accept وجود دارد، اما منابع کمی با چندین گزینه وجود دارد. به همین دلیل، تجهیزات بیش از حد بارگذاری می شوند.
    • حافظه پنهان مشترک در توانایی خود برای صدور پاسخ یکسان به درخواست های یکسان از کاربران مختلف محدود است.
    • عبور از هدرهای Accept همچنین می تواند برخی از اطلاعات را در مورد ترجیحات آن، مانند زبان های مورد استفاده، مرورگر، رمزگذاری نشان دهد.

    مدیریت مشتری

    که در این موردنوع محتوا فقط در سمت مشتری تعیین می شود. برای انجام این کار، سرور با کد وضعیت 300 (چند گزینه) یا 406 (غیر قابل قبول) لیستی از گزینه ها را برمی گرداند که از بین آنها کاربر گزینه مناسب را انتخاب می کند. مذاکره مدیریت شده توسط مشتری زمانی به خوبی کار می کند که محتوا در رایج ترین روش ها (مانند زبان و رمزگذاری) متفاوت باشد و از کش عمومی استفاده شود.

    اشکال اصلی این است بار اضافی، زیرا برای دریافت محتوای مورد نظر باید یک درخواست اضافی ارائه دهید.

    تایید شفاف

    این مذاکره برای مشتری و سرور کاملاً شفاف است. در این مورد، از یک حافظه پنهان مشترک استفاده می‌شود که شامل فهرستی از گزینه‌ها است، مانند یک مذاکره مدیریت‌شده توسط مشتری. اگر حافظه نهان تمام این گزینه ها را درک کند، مانند یک مذاکره مدیریت شده توسط سرور، خودش انتخاب می کند. این باعث کاهش بار روی سرور مبدا و حذف درخواست اضافی از مشتری می شود.

    مشخصات هسته HTTP مکانیسم مذاکره شفاف را با جزئیات توصیف نمی کند.

    محتوای چندگانه

    پروتکل HTTPاز انتقال چندین موجودیت در یک پیام واحد پشتیبانی می کند. علاوه بر این، موجودیت ها می توانند نه تنها به عنوان یک دنباله تک سطحی، بلکه به عنوان یک سلسله مراتب با عناصر تو در تو در یکدیگر منتقل شوند. انواع رسانه چندبخشی/* برای نشان دادن محتوای چندگانه استفاده می شود. کار با این انواع بر اساس انجام می شود قوانین عمومی، در RFC 2046 توضیح داده شده است (مگر اینکه توسط یک نوع رسانه خاص مشخص شده باشد). اگر گیرنده نمی داند که چگونه با نوع کار کند، آن را به همان روشی که چند قسمتی/مختلط انجام می دهد رفتار می کند.

    پارامتر مرزی به معنای جداکننده بین است انواع مختلفپیام های ارسال شده به عنوان مثال، پارامتر DestAddress که از فرم ارسال می شود، مقدار را ارسال می کند آدرس ایمیلو عنصر AttachedFile1 به دنبال آن محتوای باینری تصویر jpg. را ارسال می کند

    در سمت سرور، پیام‌هایی با محتوای چندگانه ممکن است در پاسخ به درخواست‌های چند منبع ارسال شوند. در این حالت از نوع رسانه چندپارتی/بایتری استفاده می شود.

    از سمت مشتری، هنگام ارسال فرم HTML، از روش POST بیشتر استفاده می شود. یک مثال معمولی صفحات ارسال ایمیل با پیوست فایل است. هنگام ارسال چنین نامه ای، مرورگر پیامی از نوع multipart/form-data تولید می کند که به عنوان بخش های جداگانه وارد شده توسط کاربر، موضوع نامه، آدرس گیرنده، خود متن و فایل های پیوست شده در آن ادغام می شود:

    POST /send-message.html HTTP/1.1 میزبان: mail.example.com ارجاع دهنده: http://mail.example.com/send-message.html عامل کاربر: BrowserForDummies/4.67b نوع محتوا: چندبخشی/فرم- داده ها؛ boundary="Asrf456BGe4h" Content-Length: (حجم کل، از جمله سرفصل های کودک) اتصال: keep-alive Keep-Alive: 300 (خط خالی) (مقدمه مفقود شده) --Asrf456BGe4h Content-Disposition: form-data; name="DestAddress" (خط خالی) [ایمیل محافظت شده]--Asrf456BGe4h Content-Disposition: form-data; name="MessageTitle" (خط خالی) من از --Asrf456BGe4h Content-Disposition: form-data; name="MessageText" (خط خالی) سلام واسیلی! آن شیر خانگی که هفته پیش با من گذاشتی کاناپه ام را پاره کرد. لطفا زود آن را بردارید! ضمیمه دو عکس از عاقبت. --Asrf456BGe4h Content-Disposition: form-data; name="AttachedFile1"; filename="horror-photo-1.jpg" نوع محتوا: image/jpeg (خط خالی) (محتوای باینری عکس اول) --Asrf456BGe4h Content-Disposition: form-data; name="AttachedFile2"; filename="horror-photo-2.jpg" نوع محتوا: image/jpeg (خط خالی) (محتوای باینری عکس دوم) --Asrf456BGe4h-- (پاسخ نامه گم شده)

    در مثال، در هدرهای Content-Disposition، پارامتر نام مطابقت دارد ویژگی نامدر تگ های HTML و