آنچه شما باید در مورد پروتکل 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 و
ویژگی های پروتکل
اکثر پروتکل ها برای ایجاد یک جلسه TCP که در طی آن مجوز یک بار اتفاق می افتد، و اقدامات بعدیدر چارچوب این مجوز اجرا می شود. HTTP برای هر درخواست یک جلسه TCP جداگانه ایجاد می کند. نسخههای بعدی HTTP اجازه میداد چندین درخواست در یک جلسه TCP ایجاد شود، اما مرورگرها معمولاً فقط صفحه و اشیاء موجود در آن (تصاویر، سبکهای آبشاری و غیره) را درخواست میکنند و سپس جلسه TCP را بلافاصله خاتمه میدهند. HTTP از کوکی ها برای پشتیبانی از دسترسی مجاز (غیر ناشناس) استفاده می کند. علاوه بر این، این روش مجوز به شما امکان می دهد حتی پس از راه اندازی مجدد مشتری و سرور، جلسه را ذخیره کنید.
هنگام دسترسی به داده ها از طریق FTP یا پروتکل های فایل، نوع فایل (به طور دقیق تر، نوع داده های موجود در آن) با پسوند نام فایل تعیین می شود که همیشه راحت نیست. HTTP، قبل از انتقال خود داده، سربرگ Content-Type: type / subtype را ارسال می کند، که به مشتری اجازه می دهد بدون ابهام نحوه پردازش داده های ارسالی را تعیین کند. این امر به ویژه هنگام کار با اسکریپت های CGI بسیار مهم است، زمانی که پسوند نام فایل نشان دهنده نوع داده ارسال شده به مشتری نیست، بلکه نیاز به اجرا را نشان می دهد. فایل داده شدهبر روی سرور و ارسال نتایج برنامه نوشته شده در این فایل برای مشتری (در این مورد، همان فایل بسته به آرگومان های درخواست و ملاحظات خود می تواند پاسخ هایی ایجاد کند. انواع متفاوت- در ساده ترین حالت، تصاویر در فرمت های مختلف).
علاوه بر این، HTTP به مشتری اجازه می دهد تا پارامترهایی را به سرور ارسال کند که به اسکریپت CGI در حال اجرا ارسال می شود. برای این کار، فرم ها به HTML معرفی شدند.
این ویژگی های HTTP امکان ایجاد موتورهای جستجو (اولین آنها AltaVista بود که توسط DEC ایجاد شد)، انجمن ها و فروشگاه های اینترنتی را ممکن ساخت. با تجاری سازی اینترنت، شرکت هایی ظاهر شدند که زمینه اصلی فعالیت آنها ارائه دسترسی به اینترنت (ارائه دهندگان) و ایجاد وب سایت بود.
یادداشت
همچنین ببینید
پیوندها
به شما امکان می دهد منابع مختلفی مانند اسناد HTML را دریافت کنید. پروتکل HTTP اساس ارتباطات در اینترنت است. HTTP یک پروتکل ارتباطی سرویس گیرنده-سرور است، به این معنی که درخواست ها به سرور توسط گیرنده، معمولاً یک مرورگر وب، آغاز می شود. سند نهایی حاصل از اسناد فرعی مختلف، به عنوان مثال، از متن دریافتی جداگانه، توضیحات ساختار سند، تصاویر، فایل های ویدئویی، اسکریپت ها و موارد دیگر بازسازی می شود.
مشتریان و سرورها از طریق تبادل با یکدیگر تعامل دارند پیام های فردی(و نه یک جریان داده). پیام های ارسال شده توسط مشتری، معمولا یک مرورگر وب، نامیده می شود سوالات، و پیام های ارسال شده توسط سرور فراخوانی می شوند پاسخ می دهد.
اگرچه HTTP در اوایل دهه 1990 توسعه یافت، اما به دلیل توسعه پذیری آن در طول زمان تکامل یافته است. HTTP یک پروتکل است سطح کاربردی، که اغلب از قابلیت های یک پروتکل دیگر - TCP (یا TLS - TCP امن) - برای ارسال پیام های خود استفاده می کند، با این حال، هر پروتکل انتقال قابل اعتماد دیگری از نظر تئوری می تواند برای ارائه چنین پیام هایی استفاده شود. با توجه به توسعه پذیری آن، نه تنها برای دریافت اسناد فرامتن یا تصاویر و فیلم ها به مشتری، بلکه برای انتقال محتوا به سرورها، به عنوان مثال، با استفاده از فرم های HTML نیز استفاده می شود. همچنین میتوان از HTTP برای بازیابی تنها بخشهایی از یک سند به منظور بهروزرسانی یک صفحه وب در صورت درخواست استفاده کرد.
اجزای سیستم های مبتنی بر HTTP
HTTP یک پروتکل سرویس گیرنده-سرور است، یعنی درخواست ها توسط یک طرف - کاربر-عامل (کاربر-عامل) (یا یک پروکسی به جای آن) ارسال می شود. اغلب، عامل کاربر یک مرورگر وب است، اما میتواند هر کسی باشد، مانند رباتی که در وب گشت میزند تا دادههای نمایهسازی صفحات وب را برای موتورهای جستجو تکمیل و بهروزرسانی کند.
هر درخواست فردی درخواست) به سرور ارسال می شود که آن را پردازش کرده و پاسخی را برمی گرداند. واکنش). بین این درخواست ها و پاسخ ها، واسطه های متعددی به نام پروکسی وجود دارد که عملیات مختلفی را انجام می دهند و به عنوان مثال به عنوان دروازه یا کش عمل می کنند.
در واقعیت، دستگاههای واسطهای زیادی بین مرورگر و سرور وجود دارد که نقشی در پردازش درخواست دارند: روترها، مودمها و غیره. با توجه به این واقعیت که شبکه بر اساس سیستم سطوح (لایه) تعامل ساخته شده است، این واسطه ها در سطوح شبکه و انتقال "پنهان" می شوند. در این سیستم سطوح، HTTP بیشترین اشغال را دارد سطح بالا، که به آن "کاربرد" (یا "لایه برنامه") می گویند. آشنایی با لایه های شبکه مانند ارائه، جلسه، انتقال، شبکه، لینک و فیزیکی، برای درک عملکرد شبکه و عیب یابی ضروری است. مشکلات احتمالی، برای توصیف و درک HTTP لازم نیست.
مشتری: عامل کاربر
عامل کاربر هر ابزار یا وسیله ای است که از طرف یک کاربر عمل می کند. این نقش در درجه اول به مرورگر وب تعلق دارد. در برخی موارد، عامل های کاربر برنامه هایی هستند که توسط مهندسان و توسعه دهندگان وب برای اشکال زدایی برنامه های خود استفاده می شوند.
مرورگر همیشهنهادی است که درخواست را آغاز می کند. سرور هرگز این کار را انجام نمی دهد (اگرچه مکانیسم هایی در طول سال ها در وب ایجاد شده است که می تواند درخواست های سرور را شبیه سازی کند).
برای نمایش یک صفحه وب، مرورگر یک درخواست اولیه برای بازیابی سند HTML صفحه ارسال می کند. پس از آن، مرورگر این سند را تجزیه می کند و درخواست می کند فایل های اضافی، لازم برای نمایش محتوای صفحه وب (اسکریپت های اجرایی، اطلاعات طرح بندی صفحه - جداول CSSسبک ها، منابع اضافی در قالب تصاویر و فایل های ویدئویی). علاوه بر این، مرورگر همه این منابع را به هم متصل می کند تا آنها را در قالب یک سند واحد - یک صفحه وب به کاربر نمایش دهد. اسکریپتهایی که توسط خود مرورگر اجرا میشوند میتوانند منابع اضافی را از طریق شبکه در مراحل بعدی پردازش صفحه وب دریافت کنند و مرورگر بر این اساس دیدگاه کاربر را از این صفحه بهروزرسانی میکند.
یک صفحه وب یک سند فرامتن است. این بدان معنی است که برخی از قسمت های متن نمایش داده شده پیوندهایی هستند که می توان آنها را فعال کرد (معمولاً با کلیک بر روی دکمه ماوس) به منظور به دست آوردن و نمایش یک صفحه وب جدید. این به کاربر اجازه می دهد تا عامل کاربر خود را هنگام حرکت در وب راهنمایی کند. مرورگر این «جهتهای ترافیک» را به درخواستهای HTTP ترجمه میکند و سپس پاسخهای HTTP را به روشی کاربرپسند تفسیر میکند.
وب سرور
از طرف دیگر کانال ارتباطییک سرور وجود دارد که خدمت می کند خدمت) کاربر، در صورت درخواست، اسناد را در اختیار او قرار می دهد. از دیدگاه کاربر نهایی، سرور همیشه یکی است ماشین مجازی، که به طور کامل یا جزئی یک سند را تولید می کند ، اگرچه در واقع می تواند گروهی از سرورها باشد که بار بین آنها متعادل است ، یعنی درخواست های کاربران مختلف دوباره توزیع می شوند یا یک مجموعه پیچیده نرم افزارکه سایر رایانه ها (مانند سرورهای کش، سرورهای پایگاه داده، سرورهای برنامه) را نظرسنجی می کند تجارت الکترونیکو دیگران).
سرور لزوماً روی یک دستگاه قرار ندارد و بالعکس - چندین سرور را می توان در یک دستگاه قرار داد (میزبان) کرد. با توجه به نسخه HTTP/1.1 و داشتن هدر Host، حتی می توانند آدرس IP یکسانی را به اشتراک بگذارند.
پروکسی
بین مرورگر وب و سرور قرار دارند تعداد زیادی ازگره های شبکه که پیام های HTTP را ارسال می کنند. به دلیل ساختار لایه ای، اکثر آنها در شبکه حمل و نقل یا سطوح فیزیکی، در لایه HTTP شفاف می شود و به طور بالقوه عملکرد را کاهش می دهد. این عملیات لایه کاربردی نامیده می شود پروکسی . آنها ممکن است شفاف باشند یا نباشند (تغییر درخواست ها انجام نمی شود)، و می توانند عملکردهای مختلفی را انجام دهند:
- کش (کش می تواند عمومی یا خصوصی مانند کش مرورگر باشد)
- فیلتر کردن (مانند اسکن آنتی ویروس، کنترل والدین, …)
- تعادل بار (اجازه دهید چندین سرور درخواست های مختلف را ارائه دهند)
- احراز هویت (کنترل دسترسی به منابع مختلف)
- ورود به سیستم (اجازه ذخیره تاریخچه عملیات)
جنبه های اساسی HTTP
HTTP - ساده
حتی با وجود پیچیدگی بیشتری که در HTTP/2 با کپسوله کردن پیامهای HTTP در فریمها معرفی میشود، HTTP به طور کلی ساده و قابل خواندن برای انسان است. پیامهای HTTP میتوانند توسط انسانها خوانده و درک شوند و آزمایش توسعهدهنده آسانتر و کاهش پیچیدگی برای کاربران جدید فراهم شود.
HTTP - قابل توسعه
معرفی هدرهای HTTP در HTTP/1.0 گسترش و آزمایش پروتکل را آسان کرد. عملکرد جدید حتی می تواند با توافق ساده بین مشتری و سرور در مورد معنای هدر جدید معرفی شود.
HTTP بدون حالت است، اما یک جلسه دارد
HTTP بدون حالت است: هیچ رابطه ای بین دو درخواستی که به صورت متوالی بر روی یک اتصال اجرا می شوند وجود ندارد. این بلافاصله به احتمال مشکل برای کاربر در تلاش برای تعامل با یک صفحه خاص به ترتیب، مانند هنگام استفاده از سبد خرید در یک فروشگاه الکترونیکی، دلالت دارد. اما در حالی که هسته HTTP بدون حالت است، کوکیها به جلسات حالت حالت اجازه میدهند. با استفاده از توسعهپذیری هدر، کوکیها به رشته کارگر اضافه میشوند و به جلسه اجازه میدهند تا در هر درخواست HTTP، برخی از زمینهها یا حالتها را به اشتراک بگذارد.
HTTP و اتصالات
اتصال در سطح حمل و نقل مدیریت می شود و بنابراین اساساً فراتر از HTTP است. در حالی که HTTP نیازی ندارد که پروتکل حمل و نقل اساسی مبتنی بر اتصال باشد، فقط نیاز دارد قابلیت اطمینان، یا پیام گم شده ای وجود ندارد (یعنی حداقل نشان دهنده یک خطا). در میان دو پروتکل رایج حمل و نقل اینترنتی، TCP قابل اعتماد است در حالی که UDP قابل اعتماد نیست. HTTP متعاقباً به استاندارد TCP متکی است که مبتنی بر اتصال است، حتی اگر اتصال همیشه مورد نیاز نباشد.
HTTP/1.0 یک اتصال TCP را برای هر تبادل درخواست/پاسخ باز می کند، با دو اشکال مهم: باز کردن یک اتصال به تبادل پیام های متعدد نیاز دارد و بنابراین کند است، اگرچه زمانی که چندین پیام ارسال می شود یا زمانی که پیام ها به طور منظم ارسال می شوند کارآمدتر می شود: گرمترکیبات کارآمدتر از سرد.
برای کاهش این کاستی ها، HTTP/1.1 خط لوله را معرفی کرد (که اجرای آن دشوار بود) و اتصالات پایدار: دراز کشیده مبتنی بر TCPاتصال را می توان تا حدی از طریق هدر Connection کنترل کرد. HTTP/2 با افزودن مالتی پلکس پیام بر روی یک اتصال ساده، به گرم نگه داشتن و کارآمدتر شدن اتصال کمک کرد.
آزمایش هایی برای توسعه بهترین ها در حال انجام است پروتکل حمل و نقل، برای HTTP مناسب تر است. برای مثال، گوگل در حال آزمایش QUIC است که مبتنی بر UDP است تا پروتکل حمل و نقل قابل اعتمادتر و کارآمدتری ارائه دهد.
چه چیزی را می توان از طریق HTTP کنترل کرد
توسعه پذیری طبیعی HTTP به مرور زمان امکان کنترل و عملکرد بیشتر وب را فراهم کرده است. کش و روش های احراز هویت ویژگی های اولیه در تاریخ HTTP بودند. در مقابل، توانایی کاهش محدودیتهای اولیه در دهه 2010 اضافه شد.
موارد زیر هستند توابع عمومی، با HTTP مدیریت می شود.
-
سرور میتواند به پروکسیها و کلاینتها دستور دهد که چه چیزی و برای چه مدت در حافظه پنهان شوند. سرویس گیرنده ممکن است به کش های میانی پروکسی دستور دهد که اسناد ذخیره شده را نادیده بگیرند. - محدودیت های منبع آرامش بخش
برای جلوگیری از نرم افزارهای جاسوسی و سایر نفوذهای حریم خصوصی، مرورگر وب یک جدایی دقیق بین وب سایت ها اعمال می کند. فقط صفحات از همان منبعمی تواند به اطلاعات موجود در صفحه وب دسترسی پیدا کند. اگرچه چنین محدودیتهایی باری را بر سرور تحمیل میکنند، هدرهای HTTP میتوانند جداسازی شدید در سمت سرور را تضعیف کنند و به سند اجازه دهند تا بخشی از اطلاعات دامنههای مختلف (به دلایل امنیتی) شود. - احراز هویت
برخی از صفحات فقط برای کاربران خاص در دسترس هستند. احراز هویت اولیه را می توان از طریق HTTP، یا از طریق استفاده از هدر WWW-Authenticate و موارد مشابه، یا با تنظیم یک جلسه ویژه با استفاده از کوکی ها، ارائه کرد. - پروکسی و تونل زنی
سرورها و/یا کلاینت ها اغلب در اینترانت قرار دارند و آدرس های IP واقعی خود را از دیگران پنهان می کنند. درخواست های HTTPبرای عبور از این مانع شبکه از یک پروکسی عبور کنید. همه پراکسی ها پروکسی HTTP نیستند. برای مثال پروتکل SOCKS در سطح پایین تری عمل می کند. موارد دیگر مانند ftp را می توان توسط این پراکسی ها مدیریت کرد. - جلسات
استفاده کوکی HTTPبه شما امکان می دهد یک درخواست را با یک وضعیت در سرور مرتبط کنید. این یک جلسه ایجاد می کند حتی اگر هسته HTTP یک پروتکل بدون حالت است. این نه تنها برای سبد خرید در فروشگاه های آنلاین، بلکه برای هر سایتی که به کاربر اجازه می دهد خروجی را سفارشی کند نیز مفید است.
جریان HTTP
هنگامی که یک کلاینت می خواهد با یک سرور تعامل داشته باشد، خواه سرور مقصد باشد یا یک پروکسی میانی، مراحل زیر را انجام می دهد:
- باز کردن اتصال TCP: از اتصال TCP برای ارسال درخواست یا درخواست ها و دریافت پاسخ استفاده می شود. کلاینت می تواند یک اتصال جدید را باز کند، از یک موجود مجدد استفاده کند یا چندین اتصال TCP را به سرور باز کند.
- ارسال پیام HTTP: پیام های HTTP (قبل از HTTP/2) -- قابل خواندن توسط انسان. با شروع با HTTP/2، پیامهای ساده در فریمها کپسوله میشوند و خواندن مستقیم آنها را غیرممکن میکنند، اما اساساً یکسان میمانند. GET / HTTP/1.1 میزبان: سایت Accept-Language: fr
- خواندن پاسخ از سرور: HTTP/1.1 200 OK تاریخ: Sat, 09 Oct 2010 14:28:02 GMT سرور: Apache آخرین تغییر: سه شنبه, 01 دسامبر 2009 20:18:22 GMT برچسب ET: "51142bc149" محدوده پذیرش: بایت طول محتوا: 29769 نوع محتوا: متن/html
- اتصال را برای درخواستهای بیشتر میبندد یا دوباره استفاده میکند.
اگر خط لوله HTTP فعال باشد، چندین درخواست را می توان بدون انتظار برای دریافت اولین پاسخ کامل ارسال کرد. خط لوله HTTP به شدت در شبکه های موجود جاسازی شده است، جایی که نرم افزارهای قدیمی با نسخه های مدرن همزیستی دارند. خط لوله HTTP در HTTP/2 با درخواست های چندگانه قابل اعتمادتر در یک فریم جایگزین شده است.
پیام های HTTP
HTTP/1.1 و پیام های HTTP قبلی قابل خواندن توسط انسان هستند. در نسخه HTTP/2، این پیامها در ساختار باینری جدید، قاب، جاسازی شدهاند که امکان بهینهسازیهایی مانند فشردهسازی هدر و چندگانهسازی را فراهم میکند. حتی اگر بخشی از پیام اصلی HTTP در این نسخه از HTTP ارسال شود، معنای هر پیام تغییر نمیکند و کلاینت درخواست اصلی HTTP را دوباره ایجاد میکند (معمولا). همچنین برای درک پیام های HTTP/2 در قالب HTTP/1.1 مفید است.
HTTP (پروتکل انتقال ابرمتن) به عنوان ستون فقرات شبکه جهانی وب توسعه داده شد.
پروتکل HTTP به شرح زیر عمل می کند: برنامه مشتری یک اتصال TCP با سرور برقرار می کند (شماره پورت استاندارد 80 است) و یک درخواست HTTP برای آن صادر می کند. سرور این درخواست را پردازش می کند و یک پاسخ HTTP برای مشتری صادر می کند.
ساختار درخواست HTTP
یک درخواست HTTP از یک هدر درخواست و یک بدنه درخواست تشکیل شده است که با یک رشته خالی از هم جدا شده اند. ممکن است بدنه درخواست وجود نداشته باشد.
هدر درخواست شامل خط اصلی (اول) درخواست و خطوط بعدی است که درخواست را در خط اصلی اصلاح می کند. خطوط بعدی نیز ممکن است از دست رفته باشند.
درخواست در خط اصلی شامل سه قسمت است که با فاصله از هم جدا شده اند:
روش(به عبارت دیگر، دستور HTTP):
گرفتن- درخواست سند متداول ترین روش استفاده شده؛ در HTTP/0.9، آنها می گویند که این تنها یکی بود.
سر- درخواست عنوان سند. تفاوت با GET در این است که فقط هدر درخواست با اطلاعات مربوط به سند برگردانده می شود. خود سند صادر نمی شود.
پست- این روش برای ارسال داده به اسکریپت های CGI استفاده می شود. خود داده در سطرهای بعدی پرس و جو به عنوان پارامتر دنبال می شود.
قرار دادن- سند را روی سرور قرار دهید. تا جایی که من میدونم خیلی کم استفاده میشه. درخواست با این روش دارای بدنه ای است که خود سند در آن منتقل می شود.
منبعمسیر یک فایل خاص در سرور است که مشتری می خواهد دریافت کند (یا مکان - برای روش PUT). اگر منبع فقط یک فایل برای خواندن باشد، سرور باید آن را در بدنه پاسخ در آن درخواست بازگرداند. اگر مسیری برای برخی از اسکریپت های CGI باشد، سرور اسکریپت را اجرا می کند و نتیجه اجرای آن را برمی گرداند. به هر حال، به لطف چنین وحدت منابع، عملاً برای مشتری بی تفاوت است که او در سرور چه چیزی است.
نسخه پروتکل-نسخه پروتکل HTTP که برنامه کلاینت با آن کار می کند.
بنابراین یک درخواست ساده HTTP ممکن است به شکل زیر باشد:
این فایل ریشه را از دایرکتوری ریشه سرور وب درخواست می کند.
خطوط بعد از رشته پرس و جو اصلی فرمت زیر را دارند:
پارامتر: مقدار.
به این ترتیب پارامترهای درخواست تنظیم می شوند. این اختیاری است، تمام خطوط بعد از رشته پرس و جو اصلی ممکن است گم شده باشند. در این حالت، سرور مقدار پیش فرض آنها را می پذیرد یا بر اساس نتایج درخواست قبلی (هنگام کار در حالت Keep-Alive).
در اینجا برخی از رایج ترین پارامترهای درخواست HTTP آورده شده است:
ارتباط(اتصال) - می تواند مقادیر Keep-Alive را بگیرد و ببندد. Keep-Alive ("keep alive") به این معنی است که پس از صدور این سند، ارتباط با سرور قطع نمی شود و می توان درخواست های بیشتری را صادر کرد. اکثر مرورگرها در حالت Keep-Alive کار می کنند، زیرا به شما امکان می دهد یک صفحه html و تصاویر آن را در یک اتصال به سرور "دانلود" کنید. پس از تنظیم، Keep-Alive تا اولین خطا ادامه می یابد یا به صراحت در درخواست بستن بعدی Connection: Close مشخص شده است.
بستن - پس از پاسخ به این درخواست، اتصال بسته می شود.
عامل کاربر- مقدار "تعیین کد" مرورگر است، به عنوان مثال:
Mozilla/4.0 (سازگار؛ MSIE 5.0؛ Windows 95؛ DigExt)
تایید کنید- لیستی از انواع محتوای پشتیبانی شده توسط مرورگر به ترتیب ترجیح آنها توسط این مرورگر، به عنوان مثال برای IE5 من:
پذیرش: image/gif، image/x-xbitmap، image/jpeg، image/pjpeg، application/vnd.ms-excel، application/msword، application/vnd.ms-powerpoint، */*
این بدیهی است که برای مواردی ضروری است که سرور می تواند یک سند را در قالب های مختلف صادر کند.
مقدار این پارامتر عمدتاً توسط اسکریپتهای CGI برای ایجاد پاسخی که برای یک مرورگر خاص تطبیق داده شده است استفاده میشود.
ارجاع دهنده- آدرس اینترنتی که از آن به این منبع رفته اند.
میزبان- نام میزبانی که منبع از آن درخواست شده است. اگر سرور دارای چندین سرور مجازی تحت یک آدرس IP باشد، مفید است. در این صورت نام سرور مجازی از این قسمت مشخص می شود.
پذیرش-زبان- زبان پشتیبانی شده برای سروری که میتواند یک سند را به زبانهای مختلف ارائه کند، مهم است.
فرمت پاسخ HTTP
فرمت پاسخ بسیار شبیه به فرمت درخواست است: همچنین دارای یک سرصفحه و یک بدنه است که با یک خط خالی از هم جدا شده اند.
هدر همچنین از یک خط اصلی و خطوط پارامتر تشکیل شده است، اما قالب خط اصلی با سرصفحه درخواست متفاوت است.
رشته پرس و جو اصلی شامل 3 فیلد است که با فاصله از هم جدا شده اند:
نسخه پروتکل- مشابه پارامتر درخواست مربوطه.
کد خطا- تعیین کد "موفقیت" درخواست. کد 200 به معنای "همه چیز خوب است" (OK) است.
شرح شفاهی خطا- "رمزگشایی" کد قبلی. مثلا برای 200 اوکی است، برای 500 خطای سرور داخلی است.
متداول ترین پارامترهای پاسخ http عبارتند از:
ارتباط- مشابه پارامتر درخواست مربوطه.
اگر سرور از Keep-Alive پشتیبانی نمی کند (برخی هستند)، مقدار Connection در پاسخ همیشه نزدیک است.
بنابراین، به نظر من، تاکتیک صحیح مرورگر به شرح زیر است:
1. موضوع در درخواست اتصال: Keep-Alive.
2. وضعیت اتصال را با فیلد Connection در پاسخ قضاوت کنید.
نوع محتوا("نوع محتوا") - شامل تعیین نوع محتوای پاسخ است.
بسته به مقدار Content-Type، مرورگر پاسخ را به عنوان یک صفحه HTML، یک تصویر گیف یا jpeg، فایلی که باید در دیسک ذخیره شود یا چیز دیگری در نظر می گیرد و اقدام مناسب را انجام می دهد. مقدار Content-Type برای مرورگر همان مقدار پسوند فایل برای ویندوز است.
برخی از انواع محتوا:
text/html - متن در قالب HTML (صفحه وب).
text/plain - متن ساده (شبیه به "notepad")؛
تصویر/jpeg - تصویر با فرمت JPEG.
تصویر/گیف - همان، در قالب GIF؛
application/octet-stream - جریانی از "octet" (یعنی فقط بایت ها) که روی دیسک نوشته می شود.
در واقع انواع محتوای بیشتری وجود دارد.
طول محتوا("طول محتوا") - طول محتوای پاسخ در بایت.
آخرین اصلاح("آخرین اصلاح") - تاریخ آخرین تغییر سند.
پروتکل HTTP (پروتکل انتقال ابرمتن) یک پروتکل لایه کاربردی است که به برنامه ها اجازه می دهد تا در سیستم های اطلاعاتی توزیع شده، مشارکتی یا ناهمگن ارتباط برقرار کنند. این پروتکل به برنامه های کاربردی اجازه می دهد تا داده های ارائه شده به شکل قابل خواندن توسط انسان را مبادله کنند.
همانطور که از نام آن پیداست، HTTP در ابتدا برای انتقال به اصطلاح فرامتن (hypertext) بین برنامه ها طراحی شده بود که نوع خاصی از داده ایجاد شده مطابق با استاندارد HTML (HyperText Markup Language) است. یک سند فرامتن شامل دادههایی است که با تگهای HTML علامتگذاری شدهاند و ترکیبی از متن، تصاویر، لینکها و سایر ابزارهای ارائه داده است. هایپرلینک ها - یکی از مهم ترین اجزای یک سند HTML - حوزه های تعاملی هستند که تأثیر آنها منجر به دریافت داده های مرتبط با هایپرلینک می شود. این به کاربر اجازه می دهد که با اطلاعات فرامتن کار کند تا در مجموعه ای از اسناد یا حتی کل اینترنت حرکت کند و اطلاعات مورد علاقه خود را با استفاده از پیوندهای متنی به دست آورد.
پروتکل HTTP یک افزونه بر پروتکل TCP است و وسیله ای برای کنترل محتوای داده های ارسالی است. بر خلاف TCP که ساختار بسته های ارسالی را در نظر نمی گیرد، HTTP اطلاعات فرااطلاعاتی را در داده ها تعبیه می کند که به گیرنده اجازه می دهد تا داده های دریافتی را به درستی تفسیر کند. HTTP اساس اینترنت جهانی است (که به آن شبکه جهانی وب یا WWW نیز گفته می شود). اولین نسخه پروتکل - HTTP / 0.9 - دارای قابلیت های نسبتاً محدودی بود، اما با توسعه فعال شبکه جهانی، نسخه های جدیدی ظاهر شد: HTTP / 1.0 و HTTP / 1.1، که به شما امکان می دهد انتقال نه تنها اطلاعات فرامتن را کنترل کنید. از طریق شبکه های کامپیوتری، بلکه فایل های باینری دلخواه: صدا، گرافیک، آرشیو و غیره.
با توجه به اینکه HTTP یک افزونه بر روی پروتکل TCP است، انتقال داده دو طرف نیز دارد: کلاینت و سرور.
کلاینت آغازگر اتصال است و برخی از داده ها یا خدمات را از سرور درخواست می کند. کلاینت، به عنوان یک قاعده، برنامه ای به نام مرورگر (مرورگر) است که امکان نمایش اطلاعات فرامتن و دریافت فایل ها در فرمت های دیگر را فراهم می کند. برای به دست آوردن برخی از اطلاعات مورد علاقه، مشتری درخواستی را به سرور ارسال می کند که حاوی توضیحاتی از اطلاعات درخواستی است.
سرور هنگام انتقال داده ها از طریق HTTP وب سرور (وب سرور) نامیده می شود. این برنامه درخواستهای مشتریان را پردازش میکند، دادههای درخواستی را در قالب پاسخ (پاسخ) ارسال میکند، که علاوه بر دادههای مورد نیاز، متا اطلاعات توصیفکننده آنها را نیز شامل میشود.
به دست آوردن داده های مورد علاقه کاربر شامل مراحل زیر است:
کاربر آدرس منبع مورد علاقه خود را در خط مرورگر وارد می کند.
مرورگر بر اساس اطلاعات دریافتی از کاربر و همچنین با در نظر گرفتن تنظیمات آن و پیکربندی سیستم عامل، درخواستی را ایجاد می کند.
مرورگر به یک سرور، احتمالاً روی یک رایانه راه دور، متصل می شود و درخواست را به آن ارسال می کند.
سرور، با تجزیه و تحلیل درخواست، اقدامات لازم را انجام می دهد: یک پاسخ، از جمله بدنه سند درخواستی، تولید می کند. اگر یک سند فرامتن باشد، از یک فایل بارگیری می شود یا به صورت پویا توسط یک اسکریپت تولید می شود. پاسخ همچنین شامل اطلاعاتی در مورد داده های موجود در آن است.
سرور پاسخی را به مرورگر ارسال می کند.
مرورگر پاسخ را تجزیه میکند و دادههای دریافتی را در یک فایل ذخیره میکند یا در مورد سند ابرمتن، تگهای HTML را تجزیه میکند و سند را روی صفحه نمایش میدهد.
لازم به ذکر است که نه تنها یک مرورگر می تواند یک برنامه مشتری باشد، بلکه تمام مراحل، به استثنای احتمالی مورد اول، به هر حال انجام می شود.
لازم به ذکر است که در اینجا ما اتصال مستقیم مشتری به سرور حاوی اطلاعات مورد علاقه را در نظر می گیریم، اما به دلیل شرایط مختلف همیشه این امکان وجود ندارد. در چنین حالتی، اتصال ممکن است از طریق یک یا چند نقطه اتصال میانی باشد. این نقاط میانی را می توان به سه گروه تقسیم کرد:
سرورهای پروکسی (پراکسی-سرور) - یک برنامه واسطه که عملکردهای مشتری و سرور را به منظور ایجاد درخواست از طرف سایر مشتریان انجام می دهد. درخواستها توسط سرور پراکسی سرویس میشوند یا با تغییراتی (که در این حالت پروکسی مات نامیده میشود) یا بدون تغییر (در این صورت پروکسی شفاف نامیده میشود) به آن ارسال میشود. یک سرور پروکسی به گروهی از رایانه ها اجازه می دهد تا به عنوان یک کلاینت واحد عمل کنند که اغلب هنگام اتصال شبکه های محلی به اینترنت استفاده می شود.
دروازه - مانند یک سرور پروکسی، درخواست ها را پخش می کند، اما من آنها را تغییر نمی دهم. دروازه درخواستی را از مشتری دریافت می کند که گویی یک سرور حاوی منبع مورد نظر است. بنابراین، کلاینت نمی تواند تعیین کند که آیا از طریق یک دروازه یا مستقیماً به سرور حاوی منبع متصل می شود.
تونل - یک برنامه واسطه که اتصال را حفظ می کند. اگرچه هنگامی که یک اتصال برقرار شد، تونل به عنوان بخشی از انتقال HTTP در نظر گرفته نمی شود، اتصال معمولاً با یک درخواست HTTP آغاز می شود. اگر حداقل یکی از شرکت کنندگان در تبادل داده اتصال را ببندد، تونل خاتمه می یابد.
برای حفظ عملکرد انتقال داده هنگام اتصال از طریق نقاط میانی، هیچ تغییری در درخواست ها و پاسخ ها لازم نیست، به جز در مورد سرور پراکسی، که در این صورت باید فیلدهای اضافی در درخواست مشتری وجود داشته باشد. با این حال، از دیدگاه سرور، داده ها به طور مستقیم با مشتری رد و بدل می شوند، بنابراین هیچ تغییری در درخواست ها ایجاد نمی شود. بنابراین، هنگام توسعه برنامه، امکان اتصال از طریق نقاط میانی در نظر گرفته نشد.
درخواست ارسال شده توسط مشتری به سرور برای شناسایی دقیق منبع درخواستی استفاده می شود و همچنین حاوی اطلاعات لازم برای پردازش صحیح درخواست است.
در ساختار خود، درخواست شامل سه بخش است:
رشته پرس و جو
بلوک هدر
رشته پرس و جو شامل سه فیلد است که با کاراکترهای فاصله از هم جدا شده اند (کد ASCII 20h، از این پس SP)، و با ترکیبی از دو کاراکتر به پایان می رسد: carriage return (کد ASCII 0Dh، از این پس CR) و تغذیه خط (کد ASCII 0Ah، از این پس LF) . عناصر رشته کوئری با فیلدهای زیر نمایش داده می شوند:
روش (روش) - روش پردازش اعمال شده برای منبع درخواستی را تعریف می کند. بسته به روش مشخص شده، فرمت درخواست ممکن است متفاوت باشد. روش های معتبر:
در طول توسعه برنامه، تنها از متد GET پشتیبانی می شد، زیرا مرورگر این روش را در درخواست ایجاد شده به طور پیش فرض مشخص می کند.
منبع URI (شناسه منبع جهانی) (URI منبع) - محل منبع درخواستی را در قالب استاندارد شده نشان می دهد، یعنی آدرس منبع است. هنگام استفاده از روش GET، این رشته ممکن است شامل مجموعهای از پارامترها باشد که به شکل رشتههایی با فرمت "parameter_name = parameter_value" به سرور ارسال میشوند که با کاراکترهای آمپر و "&" از هم جدا شدهاند. بلوک پارامتر در انتهای رشته URI و با علامت سوال «؟» از آدرس جدا می شود.
نسخه پروتکل HTTP - در طول توسعه برنامه، پشتیبانی برای دریافت درخواست های مربوط به نسخه های 1.0 و 1.1 اجرا شد که به ترتیب با رشته های "HTTP/1.0" و "HTTP/1.1" مطابقت دارند.
بلوک هدر دنبال رشته پرس و جو ممکن است از یک یا چند سرصفحه تشکیل شده باشد:
هدر درخواست - شامل فیلدهایی است که به عنوان اصلاح کننده درخواست عمل می کنند و حاوی اطلاعاتی در مورد درخواست و پیکربندی ماشین مشتری هستند.
سرصفحه شی - اگر درخواست شامل یک شیء (مجموعه دلخواه از داده ها) باشد، فیلدهای این هدر شی را توصیف می کند و فرمت، رمزگذاری و سایر پارامترها را نشان می دهد.
هدر عمومی - شامل پارامترهای سرویس لازم برای اطمینان از انتقال صحیح و فعال کردن خدمات اضافی مانند ذخیره سازی است.
بخش هدر با دو جفت کاراکتر CR و LF به پایان می رسد، که تعیین پایان دریافت درخواست را آسان می کند، زیرا خود درخواست نمی تواند چنین ترکیبی از کاراکترها را داشته باشد.
پاسخ ارسال شده توسط سرور به مشتری فقط در نتیجه پردازش درخواست مشتری ایجاد می شود. این شامل شرحی از نتایج درخواست است و در صورت درخواست داده، شامل منبع درخواستی می شود.
در ساختار خود، پاسخ شامل بخش های زیر است:
نوار وضعیت
بلوک هدر
خط وضعیت شامل سه فیلد است که با کاراکترهای SP از هم جدا شده اند و با دنباله ای از کاراکترهای CR، LF به پایان می رسد. عناصر نوار وضعیت:
نسخه پروتکل HTTP - برنامه توسعه یافته همیشه از رشته "HTTP/1.1" استفاده می کند.
کد وضعیت (کد وضعیت) - یک کد عددی سه کاراکتری که نتیجه درخواست را مشخص می کند. اگرچه استاندارد مجموعه نسبتاً بزرگی از کدهای وضعیت را تعریف می کند، کدهای زیر در برنامه استفاده می شود:
- 200 - اجرای موفقیت آمیز؛
- 400 - درخواست نامعتبر
- 401 - دسترسی غیرمجاز؛
- 404 - منبع یافت نشد.
- 405 - روش غیر قابل اجرا؛
- 505 یک نسخه پشتیبانی نشده از HTTP است.
عبارت دلیل - عبارت کوتاهی که کد وضعیت درخواست را توضیح می دهد. استاندارد مجموعه ای استاندارد از عبارات را پیشنهاد می کند، اما این مجموعه تا حدودی در برنامه اصلاح شده است.
بلوک هدر زیر نوار وضعیت ممکن است از یک یا چند سرصفحه تشکیل شده باشد:
هدر درخواست
عنوان شی
سربرگ کلی
سرفصل ها به تفصیل در 2.2.3.3 مورد بحث قرار گرفتند.
بخش سرصفحه با دو جفت کاراکتر CR و LF به پایان می رسد و به دنبال آن مجموعه دلخواه از کاراکترها - شیء. هنگامی که برنامه در حال اجرا است، چنین اشیایی فقط می توانند اسناد فرامتن در قالب HTML باشند که به صورت پویا توسط افزونه ها تولید می شوند.
توجه شما به شرح جنبه های اصلی پروتکل HTTP دعوت می شود - پروتکل شبکه ای که از اوایل دهه 90 تا به امروز به مرورگر شما اجازه می دهد صفحات وب را بارگیری کند. این مقاله برای کسانی نوشته شده است که تازه شروع به کار با شبکه های کامپیوتری و توسعه برنامه های کاربردی شبکه کرده اند و هنوز خواندن مشخصات رسمی به تنهایی برایشان دشوار است.
HTTP- یک پروتکل انتقال داده پرکاربرد، که در اصل برای انتقال اسناد فرامتن در نظر گرفته شده است (یعنی اسنادی که ممکن است حاوی پیوندهایی باشند که به شما امکان می دهد انتقال به اسناد دیگر را سازماندهی کنید).
مخفف HTTP مخفف عبارت است پروتکل انتقال ابر متن، "پروتکل انتقال ابرمتن". طبق مشخصات OSI، HTTP یک پروتکل لایه کاربردی (بالا، هفتم) است. نسخه فعلی پروتکل، HTTP 1.1، در مشخصات RFC 2616 توضیح داده شده است.
پروتکل HTTP استفاده از ساختار انتقال داده کلاینت-سرور را فرض می کند. برنامه مشتری درخواستی را تشکیل می دهد و آن را به سرور ارسال می کند، پس از آن نرم افزار سرور این درخواست را پردازش می کند، یک پاسخ تولید می کند و آن را برای مشتری ارسال می کند. پس از آن، برنامه مشتری می تواند به ارسال درخواست های دیگر ادامه دهد که به همین ترتیب پردازش می شود.
وظیفه ای که به طور سنتی با استفاده از پروتکل HTTP حل می شود، تبادل داده بین یک برنامه کاربردی کاربر است که به منابع وب (معمولاً یک مرورگر وب) دسترسی دارد و یک وب سرور. در حال حاضر، به لطف پروتکل HTTP است که کار شبکه جهانی وب تضمین می شود.
HTTP همچنین اغلب به عنوان پروتکل ارتباطی برای سایر پروتکل های لایه کاربردی مانند SOAP، XML-RPC و WebDAV استفاده می شود. در چنین حالتی گفته می شود که پروتکل HTTP به عنوان یک "حمل و نقل" استفاده می شود.
API بسیاری از محصولات نرم افزاری همچنین به استفاده از HTTP برای انتقال داده اشاره دارد - خود داده ها می توانند در هر قالبی باشند، به عنوان مثال، XML یا JSON.
به عنوان یک قاعده، انتقال داده از طریق پروتکل HTTP از طریق اتصالات TCP / IP انجام می شود. نرم افزار سرور معمولاً از پورت TCP 80 استفاده می کند (و اگر پورت به صراحت مشخص نشده باشد، نرم افزار سرویس گیرنده معمولاً از پورت 80 به طور پیش فرض برای باز کردن اتصالات HTTP استفاده می کند)، اگرچه می توان از هر پورت دیگری استفاده کرد.
چگونه درخواست HTTP ارسال کنیم؟
ساده ترین راه برای مقابله با پروتکل HTTP این است که سعی کنید به طور دستی به برخی از منابع وب دسترسی پیدا کنید. تصور کنید که یک مرورگر هستید و کاربری دارید که واقعاً می خواهد مقالات آناتولی علیزار را بخواند.فرض کنید او عبارت زیر را در نوار آدرس وارد کرده است:
http://alizar.site/
بر این اساس، شما به عنوان یک مرورگر وب، اکنون باید به وب سرور در alizar.site متصل شوید.
برای انجام این کار، می توانید از هر ابزار خط فرمان مناسب استفاده کنید. به عنوان مثال، telnet:
Telnet alizar.site 80
برای روشن شدن فوری، اگر ناگهان نظر خود را تغییر دادید، سپس Ctrl + "] را فشار دهید، و سپس وارد کنید - این به شما امکان می دهد اتصال HTTP را ببندید. علاوه بر telnet، می توانید nc (یا ncat) را امتحان کنید - به سلیقه.
پس از اتصال به سرور، باید یک درخواست HTTP ارسال کنید. به هر حال، این بسیار آسان است - درخواست های HTTP می توانند فقط از دو خط تشکیل شوند.
برای تشکیل یک درخواست HTTP، باید یک خط شروع بنویسید، و همچنین حداقل یک هدر را تنظیم کنید - این هدر Host است که اجباری است و باید در هر درخواست وجود داشته باشد. واقعیت این است که تبدیل نام دامنه به آدرس IP در سمت مشتری انجام می شود و بر این اساس، هنگامی که یک اتصال TCP را باز می کنید، سرور راه دور هیچ اطلاعاتی در مورد آدرسی که برای اتصال استفاده شده است ندارد: می تواند به عنوان مثال آدرس alizar..ru یا m.. با این حال، در واقع، اتصال شبکه در همه موارد با گره 212.24.43.44 باز می شود، و حتی اگر در ابتدا، هنگام باز کردن اتصال، نه این آدرس IP مشخص شده است، اما برخی به هیچ وجه اطلاع رسانی نشده اند - به همین دلیل این آدرس باید در هدر Host ارسال شود.
رشته پرس و جو شروع (اولیه) برای HTTP 1.1 به صورت زیر تشکیل شده است:
به عنوان مثال (چنین خط شروع ممکن است نشان دهد که صفحه اصلی سایت در حال درخواست است):
و البته، فراموش نکنید که هر فناوری زمانی که واقعاً شروع به استفاده از آن می کنید، بسیار ساده تر و واضح تر می شود.
موفق باشید و یادگیری شاد!
برچسب ها:
- http
- آلیزار
- spdy