مذاکره محتوای درخواست HTTP

http request content negotiation rfc 9110
20 آبان 1403

HTTP یا پروتکل انتقال ابرمتن یکی از مهمترین بخش‌های پایه‌ای وب مدرن است که ارتباط میان کلاینت و سرور را امکان‌پذیر می‌کند. مذاکره محتوای درخواست یعنی جایی که کلاینت و سرور بر سر نوع خاصی از محتوا برای انتقال توافق می‌کنند، یکی از ویژگی‌های مهم HTTP است. این ویژگی به کاربران اجازه می‌دهد تا بهترین نوع محتوا را بر اساس قابلیت‌های دستگاهشان دریافت کنند.
یکی از بخش‌های کلیدی مذاکره محتوا، استفاده از هدرهای HTTP مثل Accept است. این هدر به سرور می‌گوید که چه نوع محتوایی برای کلاینت مورد قبول است. برای مثال، می‌توانید درخواست دهید که اگر ممکن است، داده‌ها به صورت JSON یا HTML برگردانده شوند.
علاوه بر آن، هدر Content-Type اطلاعات بیشتری از نوع محتوای ارسالی را فراهم می‌کند، این هدر به سرور می‌گوید که داده‌هایی که فرستاده می‌شوند چه نوعی دارند تا بتواند آنها را درست پردازش کند.

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

تصور کنید که یک برنامه وب دارید که نیاز دارد جداول داده‌ای را از سرور مانند داده JSON دریافت کند. با استفاده از مذاکره محتوای درخواست، می‌توانید به جای HTML، نوع داده مد نظر، مثل JSON را درخواست دهید. این باعث کاهش پهنای باند مصرفی و فراهم‌آوردن داده‌هایی مناسب‌تر برای پردازش در سمت کلاینت می‌شود.
مثالی از هدر Accept در درخواست HTTP را در زیر می‌بینید:


GET /api/data HTTP/1.1
Host: example.com
Accept: application/json

این درخواست از سرور می‌خواهد که پاسخ را در قالب JSON فراهم کند. اگر سرور توانایی ارائه چنین پاسخی را دارد، بهینه‌ترین نسخه ممکن را ارسال می‌کند.

مثال عملی از مذاکره محتوای درخواست

در کد زیر، یک مثال ساده از استفاده از مذاکره محتوا را می‌بینید:


GET /users HTTP/1.1
Host: myapi.com
Accept: application/json

در این درخواست HTTP، کلاینت محتوای JSON را درخواست می‌دهد. بنابراین اگر سرور این نوع محتوا را پشتیبانی کند، لیستی از کاربران را به قالب JSON برمی‌گرداند.
از جهت دیگر، هدر Content-Type نیز برای ارسال اطلاعات کلاینت به سرور می‌تواند استفاده شود تا سرور بداند که داده‌ها به چه شکلی ارسال شده‌اند.

توضیحات خط به خط کد

GET /users HTTP/1.1
خط اول نشان‌دهنده متد HTTP که در اینجا GET است که معمولاً برای دریافت اطلاعات استفاده می‌شود.
Host: myapi.com
این خط نام دامنه‌ای که درخواست به آن ارسال شده را نشان می‌دهد.
Accept: application/json
این خط بیانگر درخواست انواع MIME می‌باشد که در اینجا application/json است و به سرور اعلام می‌کند که پاسخ را در قالب JSON ارسال کند.

سوالات متداول

؟

مذاکره محتوای درخواست یعنی چه؟

؟

چگونه می‌توان نوع محتوای پاسخ را مشخص کرد؟

؟

مزایای استفاده از مذاکره محتوای درخواست چیست؟