تعداد بازدید: 8215

Http Headers (قسمت اول)

هر گاه اطلاعاتی را از سرور نیاز داشته باشیم باید یک درخواست به آن بزنیم و پاسخ را از سمت سرور دریافت کنیم. بر این درخواست و پاسخ قوانینی حکم فرماست که به آن پروتکل  (Http Protocol) گفته می شود.

یک لینک یا URL یا WebAddress می تواند از چندین بخش تشکیل شده باشد که شامل نوع پروتکل (Protocol Type) , نام هاست (Host Name) , پورت (Port) , مسیر (Path) می باشد :

بخش های مختلف یک URL

نکته : ما پروتکل https را هم داریم که رمز نگاری شده و با امنیت بیشتری نسبت به پروتکل http می باشد.

پروتکل Http مجموعه قوانین حکم فرما برای نرم افزارهایی است که از آن استفاده می کنند. یعنی ممکن است برخی سرور ها از پروتکل نسخه HTTP 1.0 پیروی کنند و برخی نیز از نسخه HTTP 1.1 که در حال حاضر اکثر سرور ها از این نسخه پیروی می کنند.

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

مفاهیمی که در این قسمت بررسی می شود :

  • Request Http Header
  • Respons Http Header

هر درخواستی که از سمت کلاینت به سمت سرور ارسال می شود یا پاسخی که از سمت سرور به سمت کلاینت ارسال می شود مثل یک بسته اطلاعاتی است که شامل بدنه اصلی یه Entity Body و همچنین یک سری اطلاعات دیگر نظیر Http Header می باشد.

نحوه ارسال درخواست از سمت کلاینت (Browser) به سمت سرور  بدین گونه است که ابتدا یک درخواست کلی به URL زده می شود و پاسخ کلی شامل content بر می گردد پس از آن هم به ازای هر resource (image , css , js) یک درخواست دیگر ارسال می شود که در آنها نوع اتصال keep-alive می باشد.

Http Request Structure

هر درخواست که از سمت Client به سمت Sevrver ارسال می شود در قالب یک Http Request می باشد که حاوی یک بدنه فیلد های مربوطه با نام Request Body و همچنین یک سری اطلاعات از نوع درخواست در قالب Request Header می باشد که قالب اطلاعات آن در رابطه با تمامی درخواست ها یکسان می باشد و این همان Http Protocol و یا قوانین حاکم بر درخواست های Http می باشد.

فرمت پیامی که در پروتکل HTTP از سمت کلاینت به سمت سرور ارسال می شود  یا همان Http Requet Message Format به شکل زیر می باشد :

در ابتدا ما Method را داریم که به آن Http Verb هم می گوییم همان متد ارسالی که در فرم ها و یا CURL می باشد. که بنا به نسخه Http به روال زیر می باشد :

  • HTTP 1.0
    • POST
    • GET
    • HEAD
  • HTTP 1.1
    • POST , GET , HEAD
    • PUT
    • DELETE

پس از آن URL یا همان لینک درخواست است. مثلا gnutec.net/download را که در مرورگر یا هر کلاینت دیگری که باز می کنید یک درخواست به سروری ما می زنید.

پس از آن Http Headers می آیند که ساختار آن به شکل Key:value می باشد یک به یک زیر هم قرار می گیرند. این هدر ها اطلاعاتی را با خود به همراه دارند که توسط ما که در خواست دهنده می باشیم بوسیله دستگاهمان که می تواند یک مرورگر یا اپلیکیشن باشد قابل تعیین و تغییر است.

در انتها هم ما Entity Body را خواهیم داشت که بسته به نوع درخواست می تواند متفاوت باشد ولی به صورت کلی می توان گفت که فیلد های فرم یا فایل های آپلودی می باشد.

به طور مثال به ازای یک فرم Post شده از سمت کلاینت مرورگر ما شامل یک سری Query String می باشد که در خود همان مقادیر متغیر $_POST است . به طور مثال :

username=ali&password=secret$submit=submit+Query

نکته : Entity Body به ازای درخواست های GET خالی می باشد. زیرا که Query String ها در درخواست هایی از نوع GET واقع در URL است.

Http Response Structure

در مقابل هم هر پاسخ از سمت Server به سمت Client با پیروی از یک قالب کلی (Http Protocol) شامل یک بدنه که همان خروجی می باشد (حال در هر فرمتی نظیر text/html , application/json , text/xml) که به آن Entity Body هم می گوییم و همچنین یک سری اطلاعات در رابطه با پاسخ نظیر فرمت (content-type) یا طول پاسخ و زمان آن در قالب Response Header ارسال می گردد.

فرمت کلی پیامی که در قالب پاسخ از سمت سرور به سمت کلاینت ارسال می گردد یا Http Response structure به شکل زیر است :

یک HTTP Response row از پاسخ یک درخواست به یک سرور به شکل زیر می باشد :

HTTP/1.1 200 OK
Date: Sat, 23 Feb 2019 07:53:42 GMT
Server: Apache
X-Robots-Tag: noindex
Link: ; rel="https://api.w.org/"
X-Content-Type-Options: nosniff
Access-Control-Expose-Headers: X-WP-Total, X-WP-TotalPages
Allow: GET
Cache-Control: no-cache, must-revalidate
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE
Access-Control-Allow-Headers: Content-Type, X-Auth-Token, Origin, Authorization
Set-Cookie: mailchimp_landing_site=http%3A%2F%2Fwikiferghe.ir%2Fwp-json%2Fwli%2Fv1%2Fposts%3Fper_page%3D5%26page%3D3; expires=Sat, 23-Mar-2019 07:53:44 GMT; Max-Age=2419200; path=/
Connection: close
Transfer-Encoding: chunked
Content-Type: application/json; charset=UTF-8

[{ID:1}]

در status line ما status code را داریم که نتیجه درخواست ارسالی از سمت سرور برای کلاینت می باشد. کد های ارسالی بر اساس نوع درخواست به شرح زیر می باشند :

کد وضعیت عبارت توضیحات
200 OK Http Request به درستی دریافت اعتبارسنجی شد و پاسخ نیز به درستی به سمت کلاینت ارسال گردید.
301 Moved Permanently پاسخ ارسال می شود اما منبع درخواستی به طور دائم منتقل شده (مورد استفاده در موتور های جستجو)
302 Found صحت پاسخ و منبع درخواستی به صورت موقت منتقل شده (مورد استفاده در موتور جستجو)
400 Bad Request استاندار درخواست به درستی رعایت نشده و درخواست نامعتبر می باشد.
401 Unauthorize عدم اجرای درخواست به علت غیر مجاز تشخیص داده شدن authorization .
403 Forbidden به دلایل مختلف سرور درخواست شما را غیر مجاز می داند و پاسخی ارسال نمی کند. (مثلا وب سایت هایی که آی پی های ایران را غیر مجاز می دانند مثل ORACLE)
404 Not Found منبع درخواستی براساس درخواست شما یافت نشد.
500 Internal Sever Error بروز خطا بر روی سرویس دهنده.

پس از آن هدر های مربوط به پاسخ (Http Response Headers) ارسال می گردد که هر کدام در یک خط به صورت Key:value ارسال می گردند.

Entity Body که همان content مربوطه با فرمت خاص (Content-Type) می باشد که می تواند با فرمت text/html , text/xml , application/json باشد.

مطالب مشابه

ویژگی های جدید در PHP 7

php7 با عملکردی متفاوت و ویژگی های جدید و حذف برخی عملکرد های قدیمی به همراه تغییرات زیادی ارائه شد. بسیاری از ابزارهای...

اشتراک گذاری :

مدیر وب سایت گنوتک . برنامه نویسی رو با زبان C در هفده سالگی شروع کردم . در حال حاضر به برنامه نویسی php برپایه معماری MVC , HMVC و همچنین سیستم مدیریت محتوای WordPress و فریم ورک محبوب لاراول علاقه مند هستم و دوست دارم اطلاعاتم رو با شما به اشتراک بگذارم.

2 دیدگاه برای Http Headers (قسمت اول)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *