در دنیای وب، پروتکل 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:
این بخش متغیر است و شامل دادههای واقعی یا اطلاعات اضافی است که درون فریم ذخیره میشوند.