آشنایی با قالب‌های فریم در HTTP/2 بر اساس RFC 9113

understanding frame formats http2 rfc 9113
20 آبان 1403

در دنیای وب، پروتکل HTTP ارتباط اصلی بین مرورگرها و سرورها را مدیریت می‌کند. نسخه جدیدتر این پروتکل، یعنی HTTP/2، به منظور افزایش کارایی و سرعت بهینه‌سازی شده است. یکی از ویژگی‌های کلیدی HTTP/2، ساختار فریم‌هایی است که داده‌ها را منتقل می‌کند. این ساختار به هر بسته داده‌ای که بین مرورگر و سرور رد و بدل می‌شود اجازه می‌دهد که به قسمت‌های کوچکتر به نام "فریم" تقسیم شود، و این امر باعث می‌شود که چندین فریم به طور همزمان و موازی ارسال شوند.

این ویژگی HTTP/2 بسیار مهم است زیرا به مرورگرها اجازه می‌دهد که درخواست‌ها و پاسخ‌های بیشتری را در یک اتصال واحد مدیریت کنند. فریم‌ها انواع و ویژگی‌های مختلفی دارند که هرکدام نقشی در فرایند تبادل اطلاعات بازی می‌کنند. دانستن چگونگی کارکرد و ساختار این فریم‌ها می‌تواند به توسعه‌دهندگان کمک کند تا بهترین استفاده را از قابلیت‌های HTTP/2 ببرند.

هر فریم در HTTP/2 شامل یک هدر فریم ۹ بایتی است که اطلاعات مهمی مانند طول فریم، نوع فریم، و فیلدهای کنترلی دیگر را شامل می‌شود. باقی‌مانده فریم، وابسته به نوع آن، شامل اطلاعات اضافی یا داده واقعی خواهد بود. این طراحی پیچیدگی‌های خاصی دارد که راحتی استفاده و کارایی را بهبود می‌بخشد.

انواع فریم‌ها در HTTP/2 با اهداف خاصی طراحی شده‌اند مانند فریم‌های داده، فریم‌های هدر، و فریم‌های کنترل جریان که هر یک تأثیر مستقیمی بر نحوه ارتباط و سرعت انتقال اطلاعات دارند. این ساختار باعث کاهش زمان بارگذاری صفحات وب شده و تجربه بهتری را برای کاربران ایجاد می‌کند.

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

Frame Header:\r\n+-----------------------------------------------+\r\n|                 Length (24)                   |\r\n+---------------+---------------+---------------+\r\n|   Type (8)    |   Flags (8)   |\r\n+---------------+---------------+-------------------------------+\r\n|                   Stream Identifier (31)                   |\r\n+-----------------------------------------------+\r\n|                   Frame Payload (variable)                   |\r\n+---------------------------------------------------------------+

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

Frame Header:

Frame Header آغاز ساختار یک فریم است و شامل اطلاعات کلیدی درباره فریم می‌باشد.


Length:

در این بخش، طول فریم به صورت یک عدد ۲۴ بیتی مشخص می‌شود که حجم داده در فریم را تعیین می‌کند.


Type:

Type نوع فریم را تعیین می‌کند که به صورت ۸ بیت ذخیره می‌شود. هر نوع فریم عملکرد و کارکرد خاصی دارد.


Flags:

بخش Flags شامل ۸ بیت است که برای کنترل و تنظیم ویژگی‌های فریم استفاده می‌شود.


Stream Identifier:

این شناسه ۳۱ بیتی برای تعیین جریانی که فریم به آن تعلق دارد استفاده می‌شود، و به سازمان‌دهی جریان‌های داده کمک می‌کند.


Frame Payload:

این بخش متغیر است و شامل داده‌های واقعی یا اطلاعات اضافی است که درون فریم ذخیره می‌شوند.

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

؟

چرا HTTP/2 بهتر از HTTP/1.1 است؟

؟

فریم‌ها در HTTP/2 چه نقشی دارند؟

؟

Stream Identifier در HTTP/2 چیست؟