پرتکل http2
فکر میکنم ب حث درمورد پیشزمینه و اتفاقات گذشته بس باشد. برویم به سراغ استانداردهای پرتکل: چیزهایی که http2 را ساختند.
http2 یک پرتکل باینری است.
اگر شما با پرتکلهای اینترنتی قبلا کار کرده باشید، احتمالا نسبت به این مورد واکنش نشان میدهید و شروع به ارائهی دلایل مبنی بر این که چرا پرتکلهای متنی (text/ascii) بهترند چون انسانها میتوانند آنها را بخوانند، در telnet از آنها استفاده کنند و ...
http2 باینری است تا فریمبندی را راحتتر کند. تشخیص اول و آخر یک فریم در HTTP 1.1 و بقیهی پرتکلهای متنی، کار پیچیدهای بود. با دورشدن از فضاهای خالی اختیاری و راههای متفاوت برای پیادهسازی یک چیز، پیادهسازی حالا راحتتر خواهد شد.
همچنین، جداکردن فریمهای مربوط به قرارداد و پرتکل از فریمهای مربوط به دادههای پاسخ، راحتتر خواهد شد - قبلا این کار در HTTP1 بسیار گیجکننده بود.
در حقیقت، پرتکل قابلیت فشردهسازی را دارد و اجرا شدنش روی TLS، متن را مخفی میکند، بنابراین شخص ثالثی نمیتواند متن را از روی ترافیک جابجاشده بخواند. در واقع، باید عادت کنیم که از برنامههایی مثل Wireshark برای خواندن دادههای مبادلهشده در سطح پرتکل http2 استفاده کنیم.
دیباگکردن این پرتکل به ابزارهایی مثل curl یا برای آنالیز به Wireshark و مشابههای آن نیاز دارد.

http2 فریمها را به صورت باینری میفرستد. نوع فریمها ممکن است مختلف باشد، ولی همهی آنها یکنوع مشخصات دارند: اندازه (Length)، نوع (Type)، نشانها (Flags)، شناسهی استریم (Stream Identifier) و دادههای فریم.
در قرارداد http2، ده نوع فریم مختلف تعریف شده و اساسیترین آنها که به قابلیتهای HTTP 1.1 نیز مربوط هستند، DATA و HEADERS است. بعضی از این نوعها را در ادامه بررسی میکنیم.
شناسهی استریم که در فریم قبلی به آن اشاره شد، با یک «استریم» در هر فریم همراه است. یک استریم، مجموعهای از فریمهای داده به طور مستقل و دوطرفه است که کلاینت و سرور میتوانند در یک کانکشن http2 آنها را مبادله کنند.
یک کانکشن مستقل http2 میتواند دارای چندین استریمهای باز به طور همزمان باشد، و یا یکی از طرفین، استریمهای مختلف را با هم ترکیب کند تا چندین فریم را بسازد.
تسهیمسازی استریم به این معنی است که بستههای چندین استریم با هم ترکیب شده و در قالب یک کانکشن مبادله میشودن. دو (یا بیشتر) قطار از دادهها، تبدیل به یک قطار میشوند و در طرف دیگر، دوباره جدا میشوند. مثلا: