HTTP / RFC 9110: HTTP Semantics 7.8. Upgrade

http upgrade rfc 9110
10 تیر 1404

معرفی HTTP و مفهوم Upgrade


HTTP یا پروتکل انتقال متن‌های فراگیر، یکی از پروتکل‌های اصلی وب است که برای انتقال اطلاعات بین کلاینت و سرور استفاده می‌شود. زمانی که صحبت از HTTP می‌کنیم، به این معنی است که ما در حال دسترسی به وب‌سایت‌ها، دانلود فایل‌ها یا ارسال داده به سرور هستیم. حالا در RFC 9110، در بخش 7.8 به مفهوم Upgrade اشاره شده است، که یک ویژگی خاص در HTTP است.


مفهوم Upgrade در واقع این امکان را به کلاینت‌ها می‌دهد که از سرور بخواهند پروتکل یا فرمت ارتباطی به یک نسخه یا نوع جدیدتر تغییر کند. این به ویژه در مواقعی که درخواست جدیدی نیاز به ویژگی‌های بیشتری دارد یا کارایی بهتری می‌طلبد، مفید است. به عنوان مثال، وقتی که یک مرورگر می‌خواهد از HTTP/1.1 به WebSocket بروید، از این قابلیت استفاده می‌کند.


با استفاده از هدر Upgrade، کلاینت می‌تواند به سرور بگوید که آیا تمایل دارد پروتکل تغییر کند یا نه. اگر سرور این درخواست را پشتیبانی کند، می‌تواند رابطه را به پروتکل جدید منتقل کند. این کار به معنی این است که پس از تغییر پروتکل، ارتباط جدید می‌تواند عملیاتی متفاوت و بهتر داشته باشد.


به عنوان یک مثال ملموس، شما ممکن است بخواهید یک رابط کاربری تعاملی‌تری داشته باشید که نیازمند ارتباط مداوم با سرور باشد. در چنین مواردی، می‌توانید از HTTP برای برقراری اولین اتصال و سپس درخواست Upgrade به WebSocket برای اتصال مداوم استفاده کنید. در این حالت، HTTP تنها یک نقطه شروع خواهد بود و تا زمان برقرار بودن ارتباط از WebSocket استفاده خواهید کرد.


کد نمونه برای استفاده از Upgrade


GET /chat HTTP/1.1
Host: example.com
Connection: Upgrade
Upgrade: websocket


توضیحات کد


در اینجا یک درخواست HTTP برای ارتقا به WebSocket را مشاهده می‌کنید:



GET /chat HTTP/1.1

این خط درخواست می‌کند که به مسیر /chat در سرور متصل شویم، با این گویش که از نسخه ۱.۱ پروتکل HTTP استفاده شده است.


Host: example.com

در این خط نام میزبان سرور مشخص شده است که درخواست به آن ارسال می‌شود.


Connection: Upgrade

این خط به سرور می‌گوید که می‌خواهیم یک اتصال ارتقا یافته داشته باشیم.


Upgrade: websocket

ما به سرور اعلام می‌کنیم که می‌خواهیم به پروتکل WebSocket برویم.


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

؟

Upgrade در HTTP چه کاربردی دارد؟

؟

چگونه می‌توانم از Upgrade استفاده کنم؟

؟

آیا Upgrade فقط مخصوص WebSocket است؟