
هدر HTTP چیست؟ آشنایی با HTTP Headers و کاربرد آنها
هر درخواست و پاسخ HTTP فقط شامل آدرس، متد، کد وضعیت و محتوا نیست. کلاینت و سرور برای انتقال اطلاعات تکمیلی از بخش دیگری به نام هدر HTTP استفاده میکنند. هدرها اطلاعاتی درباره درخواست، پاسخ، نوع محتوا، روش تأیید هویت، مرورگر کاربر و فرمتهای قابلقبول منتقل میکنند. مرورگر، سرور و برنامههای مختلف با بررسی این اطلاعات میتوانند ارتباط را بهدرستی مدیریت کنند. در قسمت چهارم دوره آموزش پروتکل HTTP با مفهوم HTTP Headers آشنا میشویم. سپس تفاوت هدرهای درخواست و پاسخ و هدرهای پرکاربرد Content-Type، Authorization، User-Agent و Accept را بررسی میکنیم.
هدر HTTP چیست؟
هدر HTTP یا HTTP Header بخشی از درخواست یا پاسخ HTTP است که اطلاعات تکمیلی درباره ارتباط میان کلاینت و سرور را منتقل میکند. برای مثال، هدرها میتوانند نوع محتوای ارسالی، نوع محتوای قابلقبول، اطلاعات مرورگر، زبان موردنظر، اطلاعات ورود کاربر و روش نگهداری پاسخ در حافظه کش را مشخص کنند. هدرها معمولاً محتوای اصلی درخواست یا پاسخ را در خود قرار نمیدهند. آنها اطلاعاتی درباره نحوه ارسال، دریافت یا پردازش محتوا ارائه میکنند. برای نمونه، زمانی که سرور یک فایل JSON ارسال میکند، میتواند با هدر زیر نوع محتوا را به کلاینت اعلام کند:
Content-Type: application/jsonکلاینت با مشاهده این هدر متوجه میشود که محتوای پاسخ با فرمت JSON ارسال شده است و باید آن را بر همین اساس پردازش کند.
هدرها چه نقشی در HTTP دارند؟
هدرها به کلاینت و سرور کمک میکنند اطلاعات لازم برای مدیریت ارتباط را در کنار پیام اصلی منتقل کنند. بدون هدرها، طرف دریافتکننده اطلاعات کافی درباره نوع محتوا، دسترسی کاربر یا شیوه پردازش پاسخ نخواهد داشت. هدرهای HTTP کاربردهای مختلفی دارند:
- مشخصکردن نوع محتوای درخواست یا پاسخ
- ارسال اطلاعات تأیید هویت کاربر
- معرفی مرورگر یا نرمافزار ارسالکننده درخواست
- تعیین فرمتهای قابلقبول برای پاسخ
- مشخصکردن زبان موردنظر کاربر
- مدیریت حافظه کش مرورگر
- ارسال کوکیها میان مرورگر و سرور
- اعلام اندازه محتوای ارسالی
- مدیریت تغییر مسیرها
- کنترل بعضی تنظیمات امنیتی
هر هدر هدف مشخصی دارد. بعضی هدرها فقط در درخواست، بعضی فقط در پاسخ و برخی دیگر در هر دو مورد استفاده میشوند.
ساختار هدر HTTP چگونه است؟
هر هدر معمولاً از یک نام و یک مقدار تشکیل میشود. علامت دونقطه نام هدر را از مقدار آن جدا میکند.
Header-Name: Header-Valueبرای مثال:
Content-Type: application/jsonدر این نمونه، Content-Type نام هدر و application/json مقدار آن است.
هدرهای مختلف در خطهای جداگانه قرار میگیرند:
Content-Type: application/json
Accept: application/json
User-Agent: Mozilla/5.0نام هدرها به حروف بزرگ و کوچک حساس نیست. بنابراین، Content-Type و content-type از نظر HTTP نام یکسانی دارند. بااینحال، معمولاً برای خوانایی بهتر از شکل رایج نام هدر استفاده میکنیم.
هدرها در کدام بخش پیام HTTP قرار میگیرند؟
هدرها در درخواست و پاسخ HTTP بعد از خط شروع قرار میگیرند. یک خط خالی نیز پایان هدرها و شروع بدنه پیام را مشخص میکند. نمونه ساده یک درخواست HTTP:
POST /api/products HTTP/1.1
Host: example.com
Content-Type: application/json
Accept: application/json
Authorization: Bearer token-value
{
"name": "Laptop",
"price": 1200
}خط اول متد، آدرس و نسخه HTTP را مشخص میکند. خطهای بعدی هدرهای درخواست هستند. پس از یک خط خالی، بدنه درخواست قرار میگیرد. نمونه ساده یک پاسخ HTTP:
HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 32
Cache-Control: no-cache
{
"id": 25,
"name": "Laptop"
}در این پاسخ، خط اول شامل نسخه HTTP و کد وضعیت است. پس از آن هدرهای پاسخ و سپس محتوای اصلی قرار دارند.
Request Header چیست؟
هدر درخواست یا Request Header اطلاعات تکمیلی را از طرف کلاینت برای سرور ارسال میکند. مرورگر، برنامه موبایل یا هر کلاینت دیگری میتواند این هدرها را همراه درخواست بفرستد. سرور با بررسی هدرهای درخواست میتواند اطلاعاتی درباره کلاینت، نوع داده ارسالی، پاسخ مورد انتظار و وضعیت ورود کاربر به دست آورد. نمونهای از هدرهای درخواست:
Host: example.com
Accept: application/json
Content-Type: application/json
Authorization: Bearer token-value
User-Agent: Mozilla/5.0
Accept-Language: fa-IRهدرهای درخواست میتوانند اطلاعات زیر را منتقل کنند:
- نام دامنه مقصد
- نوع پاسخ قابلقبول برای کلاینت
- نوع اطلاعات موجود در بدنه درخواست
- اطلاعات تأیید هویت و دسترسی
- نوع مرورگر یا برنامه ارسالکننده
- زبان موردنظر کاربر
- کوکیهای ذخیرهشده در مرورگر
Response Header چیست؟
هدر پاسخ یا Response Header اطلاعات تکمیلی را از طرف سرور برای کلاینت ارسال میکند. این اطلاعات به کلاینت کمک میکنند پاسخ را بهشکل مناسب پردازش کند. نمونهای از هدرهای پاسخ:
Content-Type: application/json
Content-Length: 125
Cache-Control: no-cache
Server: nginx
Set-Cookie: sessionId=12345هدرهای پاسخ میتوانند اطلاعات زیر را مشخص کنند:
- نوع محتوای پاسخ
- اندازه محتوا
- قوانین ذخیره پاسخ در حافظه کش
- اطلاعات مربوط به سرور
- کوکیهایی که مرورگر باید ذخیره کند
- آدرس جدید برای تغییر مسیر
- تنظیمات امنیتی پاسخ
تفاوت Request Header و Response Header چیست؟
تفاوت اصلی این دو گروه به جهت انتقال اطلاعات مربوط میشود. Request Header از کلاینت به سرور میرود، اما Response Header از سرور برای کلاینت ارسال میشود.
| ویژگی | Request Header | Response Header |
|---|---|---|
| ارسالکننده | کلاینت | سرور |
| دریافتکننده | سرور | کلاینت |
| هدف اصلی | ارائه اطلاعات درباره درخواست و کلاینت | ارائه اطلاعات درباره پاسخ و سرور |
| نمونه هدرها | Accept، Authorization و User-Agent | Server، Location و Set-Cookie |
| نوع محتوا | نوع محتوای بدنه درخواست را اعلام میکند | نوع محتوای بدنه پاسخ را اعلام میکند |
بعضی هدرها مانند Content-Type میتوانند هم در درخواست و هم در پاسخ قرار بگیرند. مفهوم آنها در هر دو حالت به محتوای همان پیام مربوط میشود.
هدر Content-Type چیست؟
هدر Content-Type نوع محتوای موجود در بدنه درخواست یا پاسخ را مشخص میکند. دریافتکننده با بررسی این هدر متوجه میشود که دادهها با چه فرمتی ارسال شدهاند. برای مثال، اگر یک API اطلاعات را با فرمت JSON برگرداند، پاسخ میتواند هدر زیر را داشته باشد:
Content-Type: application/jsonاگر سرور یک صفحه HTML برگرداند، مقدار هدر میتواند بهشکل زیر باشد:
Content-Type: text/html; charset=utf-8بخش charset=utf-8 نوع کدگذاری نویسهها را مشخص میکند. UTF-8 از زبان فارسی و بسیاری از زبانهای دیگر پشتیبانی میکند.
مقادیر پرکاربرد Content-Type عبارتاند از:
| مقدار | نوع محتوا | نمونه کاربرد |
|---|---|---|
| text/html | محتوای HTML | صفحههای وب |
| text/plain | متن ساده | فایل یا پاسخ متنی |
| text/css | کد CSS | فایلهای استایل سایت |
| application/json | اطلاعات JSON | پاسخ و درخواست API |
| application/xml | اطلاعات XML | سرویسهای مبتنی بر XML |
| multipart/form-data | دادههای چندبخشی فرم | ارسال فرم همراه فایل |
| application/x-www-form-urlencoded | اطلاعات رمزگذاریشده فرم | ارسال فرمهای ساده HTML |
| image/jpeg | تصویر JPEG | نمایش یا دانلود تصویر |
انتخاب مقدار درست برای Content-Type اهمیت زیادی دارد. اگر نوع محتوا اشتباه اعلام شود، مرورگر یا برنامه دریافتکننده ممکن است نتواند اطلاعات را بهدرستی نمایش یا پردازش کند.
هدر Authorization چیست؟
هدر Authorization برای ارسال اطلاعات تأیید هویت از کلاینت به سرور استفاده میشود. سرور با بررسی این هدر تشخیص میدهد که درخواست از طرف چه کاربر یا برنامهای ارسال شده و آیا اجازه دسترسی به منبع موردنظر را دارد یا خیر. در بسیاری از APIها، کلاینت یک توکن دسترسی را همراه این هدر ارسال میکند:
Authorization: Bearer token-valueعبارت Bearer نوع روش تأیید هویت را مشخص میکند و مقدار بعد از آن توکن دسترسی است. برای مثال، ممکن است مشاهده فهرست محصولات برای همه کاربران آزاد باشد، اما ثبت، ویرایش یا حذف محصول فقط برای مدیر سایت مجاز باشد. سرور میتواند هدر Authorization را بررسی کند و سپس درباره دسترسی کاربر تصمیم بگیرد. اطلاعات حساس مانند توکن دسترسی نباید در اختیار افراد دیگر قرار بگیرند. همچنین برای محافظت از اطلاعات هنگام انتقال باید از HTTPS استفاده شود. هدر Authorization بهتنهایی اطلاعات را رمزنگاری نمیکند.
هدر User-Agent چیست؟
اطلاعاتی درباره نرمافزار ارسالکننده درخواست در اختیار سرور قرار میدهد. این نرمافزار میتواند مرورگر، برنامه موبایل، ابزار خط فرمان یا یک برنامه دیگر باشد. یک نمونه ساده از این هدر:
User-Agent: Mozilla/5.0مقدار واقعی User-Agent معمولاً طولانیتر است و میتواند اطلاعاتی درباره مرورگر، سیستمعامل و موتور پردازش صفحه داشته باشد. سرور میتواند از این اطلاعات برای اهداف مختلف استفاده کند:
- بررسی نوع مرورگر کاربر
- ارائه نسخه مناسب یک صفحه
- ثبت آمار مرورگرها و دستگاهها
- بررسی و تحلیل خطاها
- شناسایی بعضی رباتها و خزندههای وب
البته مقدار User-Agent همیشه قابل اعتماد نیست؛ زیرا کلاینت میتواند آن را تغییر دهد. بنابراین، سرور نباید برای تصمیمهای امنیتی مهم فقط به این هدر تکیه کند.
هدر Accept چیست؟
هدر Accept به سرور اعلام میکند که کلاینت چه نوع محتوایی را برای پاسخ میپذیرد. سرور میتواند با توجه به این هدر، یکی از فرمتهای پشتیبانیشده را انتخاب کند. برای مثال، اگر کلاینت انتظار دریافت اطلاعات JSON را داشته باشد، میتواند هدر زیر را ارسال کند:
Accept: application/jsonاگر کلاینت چند نوع محتوا را قبول کند، میتواند آنها را در یک هدر قرار دهد:
Accept: application/json, text/plainمرورگرها نیز هنگام درخواست صفحههای وب معمولاً چند نوع محتوا را در هدر Accept مشخص میکنند. مقدار زیر به این معنی است که کلاینت هر نوع محتوایی را میپذیرد:
Accept: */*تفاوت Content-Type و Accept چیست؟
هدرهای Content-Type و Accept هر دو با نوع محتوا ارتباط دارند، اما مفهوم آنها یکسان نیست. Content-Type نوع محتوایی را مشخص میکند که هماکنون در بدنه پیام وجود دارد. Accept نیز نوع محتوایی را اعلام میکند که کلاینت میخواهد در پاسخ دریافت کند.
| هدر | مفهوم | نمونه |
|---|---|---|
| Content-Type | نوع محتوای موجود در بدنه همین پیام | Content-Type: application/json |
| Accept | نوع محتوایی که کلاینت برای پاسخ قبول میکند | Accept: application/json |
برای مثال، کلاینت میتواند اطلاعات یک فرم را با فرمت JSON ارسال کند و از سرور نیز پاسخ JSON بخواهد:
Content-Type: application/json
Accept: application/jsonدر این مثال، Content-Type درباره بدنه درخواست و Accept درباره پاسخ مورد انتظار صحبت میکند.
معرفی هدرهای پرکاربرد HTTP
HTTP هدرهای زیادی دارد و هرکدام اطلاعات خاصی را منتقل میکنند. علاوه بر هدرهای اصلی این جلسه، آشنایی با چند هدر رایج دیگر نیز مفید است.
| نام هدر | کاربرد | محل استفاده رایج |
|---|---|---|
| Content-Type | مشخصکردن نوع محتوای بدنه پیام | درخواست و پاسخ |
| Authorization | ارسال اطلاعات تأیید هویت | درخواست |
| User-Agent | معرفی نرمافزار ارسالکننده درخواست | درخواست |
| Accept | مشخصکردن فرمتهای قابلقبول برای پاسخ | درخواست |
| Host | مشخصکردن نام دامنه مقصد | درخواست |
| Accept-Language | اعلام زبانهای موردنظر کاربر | درخواست |
| Content-Length | مشخصکردن اندازه محتوا بر حسب بایت | درخواست و پاسخ |
| Cache-Control | تعیین قوانین ذخیره محتوا در حافظه کش | درخواست و پاسخ |
| Cookie | ارسال کوکیهای ذخیرهشده برای سرور | درخواست |
| Set-Cookie | درخواست از مرورگر برای ذخیره یک کوکی | پاسخ |
| Location | مشخصکردن آدرس مقصد برای تغییر مسیر | پاسخ |
| Server | ارائه اطلاعات درباره نرمافزار سرور | پاسخ |
چه اطلاعاتی از طریق هدرها منتقل میشوند؟
هدرهای HTTP میتوانند اطلاعات متنوعی را منتقل کنند. نوع اطلاعات به هدف درخواست، پاسخ و تنظیمات برنامه بستگی دارد.
اطلاعات مربوط به محتوا
هدرهایی مانند Content-Type و Content-Length درباره نوع و اندازه محتوای پیام اطلاعات میدهند. کلاینت یا سرور با کمک این اطلاعات میتواند بدنه پیام را درست دریافت و پردازش کند.
اطلاعات تأیید هویت
کلاینت میتواند اطلاعات موردنیاز برای تأیید هویت را از طریق هدر Authorization ارسال کند. سرور نیز پس از بررسی این اطلاعات، دسترسی کاربر را مشخص میکند.
اطلاعات مربوط به کلاینت
هدرهایی مانند User-Agent و Accept-Language اطلاعاتی درباره نرمافزار، سیستم یا زبان موردنظر کاربر ارائه میکنند.
اطلاعات مربوط به پاسخ
سرور میتواند نوع پاسخ، قوانین کش، آدرس تغییر مسیر و کوکیهای جدید را از طریق هدرهای پاسخ برای کلاینت ارسال کند.
اطلاعات مربوط به کش
هدر Cache-Control مشخص میکند که مرورگر یا سرورهای واسط چگونه یک پاسخ را ذخیره و دوباره استفاده کنند. استفاده درست از کش میتواند سرعت بارگذاری سایت را افزایش دهد و تعداد درخواستهای تکراری را کاهش دهد.
اطلاعات مربوط به کوکیها
مرورگر با هدر Cookie اطلاعات کوکیهای مرتبط را برای سرور میفرستد. سرور نیز با هدر Set-Cookie میتواند از مرورگر بخواهد یک کوکی جدید را ذخیره یا مقدار یک کوکی را تغییر دهد.
نمونه کامل استفاده از هدرها در یک API
فرض کنید یک برنامه میخواهد اطلاعات یک محصول را از API دریافت کند. درخواست میتواند بهشکل زیر باشد:
GET /api/products/25 HTTP/1.1
Host: example.com
Accept: application/json
Authorization: Bearer token-value
User-Agent: MyApplication/1.0اطلاعات این درخواست را میتوان بهصورت زیر بررسی کرد:
- GET نشان میدهد که کلاینت قصد دریافت اطلاعات را دارد.
- Host نام سرور مقصد را مشخص میکند.
- Accept نشان میدهد که کلاینت پاسخ JSON میخواهد.
- Authorization اطلاعات تأیید هویت را منتقل میکند.
- User-Agent برنامه ارسالکننده درخواست را معرفی میکند.
اگر درخواست موفق باشد، سرور میتواند پاسخ زیر را ارسال کند:
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 48
Cache-Control: no-cache
{
"id": 25,
"name": "Laptop",
"price": 1200
}کد 200 موفقیت درخواست را نشان میدهد. هدر Content-Type اعلام میکند که بدنه پاسخ JSON است و Content-Length اندازه محتوا را مشخص میکند.
آیا هدر HTTP از اطلاعات محافظت میکند؟
قرارگرفتن اطلاعات در هدر به معنی مخفی یا رمزنگاریشدن آنها نیست. هدرهای HTTP نیز مانند سایر بخشهای درخواست و پاسخ میتوانند در مسیر انتقال مشاهده شوند. برای محافظت از اطلاعات باید ارتباط سایت یا API از طریق HTTPS برقرار شود. HTTPS درخواست، پاسخ، هدرها و بدنه پیام را هنگام انتقال رمزنگاری میکند. همچنین نباید اطلاعات حساس غیرضروری را در هدرها قرار داد. توکنها و اطلاعات ورود نیز باید با روشهای امن ایجاد، نگهداری و بررسی شوند.
چگونه هدرهای HTTP را مشاهده کنیم؟
با استفاده از ابزارهای توسعهدهنده مرورگر میتوان هدرهای درخواست و پاسخ را مشاهده کرد. در مرورگرهایی مانند Chrome و Firefox ابتدا ابزارهای توسعهدهنده را باز کنید و وارد بخش Network شوید. پس از بارگذاری صفحه، فهرستی از درخواستها نمایش داده میشود. با انتخاب هر درخواست و ورود به بخش Headers میتوانید اطلاعات زیر را بررسی کنید:
- آدرس درخواست
- متد HTTP
- کد وضعیت پاسخ
- Request Headers
- Response Headers
- Query String
- محتوای ارسالشده همراه درخواست
این بخش هنگام بررسی API، پیداکردن خطاهای برنامه و تحلیل ارتباط میان مرورگر و سرور کاربرد زیادی دارد.
چرا شناخت هدرهای HTTP مهم است؟
هدرها بخش مهمی از ارتباط HTTP هستند. برنامهنویسان هنگام طراحی سایت، ساخت API، پیادهسازی ورود کاربران و بررسی خطاها با آنها سروکار دارند. شناخت هدرهای HTTP کمک میکند:
- نوع اطلاعات ارسالی و دریافتی را تشخیص دهید.
- درخواستها و پاسخهای API را بهتر بررسی کنید.
- مشکلات مربوط به فرمت JSON یا HTML را پیدا کنید.
- اطلاعات تأیید هویت را به سرور ارسال کنید.
- رفتار مرورگر و سرور را بهتر درک کنید.
- مشکلات کش، کوکی و تغییر مسیر را بررسی کنید.
- درخواستها را در ابزار Network مرورگر تحلیل کنید.
جمعبندی
هدر HTTP بخشی از درخواست یا پاسخ است که اطلاعات تکمیلی درباره ارتباط میان کلاینت و سرور را منتقل میکند. هر هدر از یک نام و مقدار تشکیل میشود و علامت دونقطه این دو بخش را از یکدیگر جدا میکند. Request Header از طرف کلاینت برای سرور ارسال میشود و اطلاعاتی درباره درخواست، مرورگر، فرمت قابلقبول و تأیید هویت ارائه میکند. Response Header نیز از طرف سرور برای کلاینت فرستاده میشود و اطلاعاتی درباره نوع پاسخ، کش، کوکی و تغییر مسیر در اختیار کلاینت قرار میدهد.
Content-Type نوع محتوای موجود در پیام را مشخص میکند. Authorization برای ارسال اطلاعات تأیید هویت کاربرد دارد، User-Agent نرمافزار ارسالکننده درخواست را معرفی میکند و Accept فرمتهای قابلقبول برای پاسخ را نشان میدهد. در این قسمت با مفهوم HTTP Headers، تفاوت هدرهای درخواست و پاسخ و مهمترین اطلاعات منتقلشده از طریق هدرها آشنا شدیم. برای مشاهده تمام جلسات وارد صفحه آموزش پروتکل HTTP شوید. همچنین برای مرور قسمت قبل میتوانید مقاله متدهای HTTP و کدهای وضعیت چیست؟ را مطالعه کنید.























فرم افزودن دیدگاه
با ارسال نظرات خود ما را در ایجاد محتوای بهتر کمک کنید.