HTTP پروتکلی است که به مرورگر شما و سرورهای وب اجازه میدهد تا با یکدیگر ارتباط برقرار کنند. یکی از ویژگیهای جالب HTTP این است که میتواند بر اساس نیازها و قابلیتهای مرورگر یا دستورالعملهای کلاینت، نتایج متفاوتی از سرور درخواست کند، که این به عنوان مذاکره محتوا شناخته میشود.
مذاکره محتوا فرآیندی است که در آن مرورگر یا کلاینت میتواند به سرور بگوید که چه نوع محتوایی را ترجیح میدهد یا چه فرمتهایی را میتواند پشتیبانی کند. این کار از طریق هدرهای مختلف HTTP مثل Accept
، Accept-Language
و Accept-Encoding
انجام میشود.
زمانی که شما یک درخواست HTTP ارسال میکنید، مرورگر شما هدرهای مختلفی را به آن درخواست اضافه میکند که نشاندهنده ترجیحات و قابلیتهای مرورگر هستند. به عنوان مثال، اگر صرفاً صفحات HTML میخواهید، مرورگر شما در هدر Accept
چیزی شبیه به text/html
قرار میدهد.
سرور با بررسی این هدرها تصمیم میگیرد که چگونه به درخواست پاسخ دهد. اگر سرور قادر به ارائه محتوای درخواست شده باشد، یک پاسخ مناسب با توجه به درخواست شما ارسال میکند.
این فرآیند به تعامل بهتر کاربر کمک میکند، مخصوصاً در جاهایی که محتوا ممکن است بسته به تنظیمات منطقهای یا زبان کاربر متفاوت باشد. برای مثال، وبسایتهای بینالمللی غالباً از این ویژگی برای ارائه محتوای محلیسازی شده استفاده میکنند.
همینطور، مذاکره محتوا میتواند در بهینهسازی سرویسها نقش داشته باشد؛ برای مثال، بخشهایی از محتوا بر اساس نیاز و نوع دستگاه بهینهسازی شدهاند تا کاربران تجربه بهتری داشته باشند.
مثال ساده از مذاکره محتوا
GET /example HTTP/1.1
Host: www.example.com
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
GET /example HTTP/1.1
این خط نشان میدهد که مرورگر شما یک درخواست GET به مسیر /example در پروتکل HTTP/1.1 ارسال کرده است.
Host: www.example.com
این هدر نام هاستی که درخواست به آن ارسال میشود را مشخص میکند.
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
این هدر نوع محتوایی که مرورگر میتواند پردازش کند را لیست میکند، با اولویتبندی بر اساس مقدار q.
Accept-Language: en-US,en;q=0.5
این هدر ترجیحات زبان کاربر را نشان میدهد که در اینجا، انگلیسی با اولویت بیشتر انتخاب شده است.
Accept-Encoding: gzip, deflate
این هدر نوع انکدینگی که مرورگر میتواند دریافت کند را بیان میکند، که در اینجا gzip و deflate هستند.