اچ تی تی پی۲ net/http2
پروتکل HTTP/2 از پایه: قابها، فشردهسازی سرآیند HPACK و جریانها.
واردسازی شبکه.اچ تی تی پی۲
این بسته HTTP/2 را در سطح پروتکل پیاده میکند: قابها را میسازد و میخواند، سرآیندها را با HPACK فشرده میکند و چند درخواست را همزمان روی یک اتصال به شکل «جریان» پیش میبرد. سرور وب یا کارخواه آماده نیست. برای سرور وب معمولی یا درخواستهای تکی اچ تی تی پی را به کار ببرید که HTTP/1.1 حرف میزند؛ این بسته برای وقتی است که خود پروتکل را لازم دارید، مثلاً برای کار با سرویسی که فقط HTTP/2 دارد، آزمودن یک سرور یا فرستادن درخواستهای زیاد روی یک اتصال.
روند کار: یک ترابری روی سوکت TCP یا TLS بسازید، با اتصال جدید اتصال بگیرید و دستدهی کنید. بعد کارخواه با ارسال سرآیندها درخواست میفرستد و با انتظار اتمام جریان پاسخ را در جریان با شناسه میخواند. روی TLS، کارخواه و سرور باید با ALPN روی h2 توافق کرده باشند.
کارهایی که بسته برایتان انجام میدهد و کارهایی که به عهدهی شماست:
- به پینگها پاسخ میدهد، برای کنترل جریان بهروزرسانی پنجره میفرستد، در
ارسال دادهمنتظر جای خالی پنجره میماند و فشار سرور (server push) را رد میکند. - شبهسرآیندها را خودتان مینویسید:
:method،:scheme،:authorityو:pathدر درخواست و:statusدر پاسخ، پیش از هر سرآیند معمولی. - بدنهی هر جریان تا پایان آن جریان در حافظه و در
dataجمع میشود و جریانهای تمامشده در اتصال میمانند، پس به جای نگه داشتن یک اتصال برای میلیونها درخواست، گاهی اتصال تازه باز کنید. - هر
اتصال اچ تی تی پی۲مال یک نخ است؛ هیچ چیزی در آن قفل نمیشود.
چند درخواست روی یک اتصال
اصل HTTP/2 این است که یک اتصال چند درخواست را همزمان میبرد. هر درخواست یک جریان است با شناسهای فرد که کارخواه انتخاب میکند (۱، ۳، ۵ و همینطور)، و فریمهای جریانهای مختلف در هر دو جهت میتوانند لابهلای هم بیایند. کارخواه زیر پیش از خواندن هر چیزی سه درخواست میفرستد؛ سرور، که در همین برنامه است، به ترتیب وارونه پاسخ میدهد و باز هم هر پاسخ روی جریان درست مینشیند.
واردسازی شبکه.اچ تی تی پی۲
واردسازی شبکه.تی سی پی
واردسازی فشرده سازی
ناپایا سرور من := تی سی پی.سرور {}
تابع پاسخگو():
سوکت := تی سی پی.پذیرش(سرور من)
ناپایا اتصال := اچ تی تی پی۲.اتصال جدید(اچ تی تی پی۲.ترابری ساده(سوکت.توصیفگر)، درست)
اگر وارونه اچ تی تی پی۲.دستدهی سرور(اتصال):
برگشت
پایان
ناپایا شناسهها := وکتور {} برگردان وکتور<صحیح>
تا شناسهها.طول() کوچکتر ۳:
شناسهها.بیفزا(اچ تی تی پی۲.انتظار سرآیند(اتصال، ۲۰))
پایان
ناپایا ش := شناسهها.طول() - ۱
تا ش بزرگتربرابر ۰:
شناسه := شناسهها.بگیر(ش)
مسیر := اچ تی تی پی۲.دریافت سرآیند(اچ تی تی پی۲.جریان با شناسه(اتصال، شناسه).سرآیندها، ":path")
ناپایا سرآیندها := اچ تی تی پی۲.فهرست سرآیندها {}
اچ تی تی پی۲.افزودن سرآیند(سرآیندها، ":status"، "200")
_ := اچ تی تی پی۲.ارسال سرآیندها(اتصال، شناسه، سرآیندها، نادرست)
_ := اچ تی تی پی۲.ارسال داده(اتصال، شناسه، فشرده سازی.بافر از رشته("صفحهی " + مسیر)، درست)
ش -= ۱
پایان
_ := اچ تی تی پی۲.انتظار اتمام جریان(اتصال، ۰، ۵)
اچ تی تی پی۲.بستن اتصال(اتصال)
پایان
تابع درخواست(اتصال &: اچ تی تی پی۲.اتصال اچ تی تی پی۲، مسیر: رشته): صحیح:
شناسه := اچ تی تی پی۲.شناسه جریان بعدی(اتصال)
ناپایا سرآیندها := اچ تی تی پی۲.فهرست سرآیندها {}
اچ تی تی پی۲.افزودن سرآیند(سرآیندها، ":method"، "GET")
اچ تی تی پی۲.افزودن سرآیند(سرآیندها، ":scheme"، "http")
اچ تی تی پی۲.افزودن سرآیند(سرآیندها، ":path"، مسیر)
اچ تی تی پی۲.افزودن سرآیند(سرآیندها، ":authority"، "127.0.0.1")
_ := اچ تی تی پی۲.ارسال سرآیندها(اتصال، شناسه، سرآیندها، درست)
برگشت شناسه
پایان
تابع ریشه:
سرور من = تی سی پی.پیوند(۰)
نخ := نخساز(پاسخگو)
سوکت := تی سی پی.شماره گیری("127.0.0.1"، تی سی پی.درگاه(سرور من))
ناپایا اتصال := اچ تی تی پی۲.اتصال جدید(اچ تی تی پی۲.ترابری ساده(سوکت.توصیفگر)، نادرست)
اگر وارونه اچ تی تی پی۲.دستدهی کارخواه(اتصال):
سرچاپ "دستدهی ناموفق"
برگشت ۱
پایان
ناپایا شناسهها := وکتور {} برگردان وکتور<صحیح>
هر نشانی در ["/a"، "/b"، "/c"]:
شناسهها.بیفزا(درخواست(اتصال، نشانی))
پایان
سرچاپ "سه درخواست فرستاده شد روی جریانهای"، شناسهها.بگیر(۰)، شناسهها.بگیر(۱)، شناسهها.بگیر(۲)
هر شناسه در شناسهها:
_ := اچ تی تی پی۲.انتظار اتمام جریان(اتصال، شناسه، ۵۰)
s := اچ تی تی پی۲.جریان با شناسه(اتصال، شناسه)
سرچاپ "جریان"، شناسه، اچ تی تی پی۲.دریافت سرآیند(s.سرآیندها، ":status")، فشرده سازی.بافر به رشته(s.بدنه)
پایان
سرچاپ "اتصالهای به کار رفته: ۱، جریانها:"، اچ تی تی پی۲.تعداد جریانها(اتصال)
_ := اچ تی تی پی۲.ارسال خداحافظی(اتصال، اچ تی تی پی۲.کد بدون خطا، "")
اچ تی تی پی۲.بستن اتصال(اتصال)
نخپیوند(نخ)
تی سی پی.بستن سرور(سرور من)
برگشت ۰
پایانانتظار سرآیند در سرور فریمها را میخواند تا فریمی برای جریانی برسد که سرآیندهایش کامل است و شناسهی همان جریان را برمیگرداند، یا اگر اتصال شکست بخورد H2_POLL_ERROR را. درخواستی که بدنه هم دارد فریمهای بیشتری روی همان جریان میفرستد، پس سروری که بدنه میپذیرد باید شناسههایی را که دیده به یاد داشته باشد. انتظار اتمام جریان در کارخواه فریمها را، از هر جریانی، میخواند تا جریانی که پرسیدهاید تمام شود؛ فریمهای بقیه در جریان خودشان برای بعد نگه داشته میشوند. آرگومان آخرش سقف شمار فریمهایی است که خوانده میشود، تا طرف مقابل خراب نتواند شما را برای همیشه منتظر بگذارد.
HPACK چقدر صرفهجویی میکند
درخواستها به یک سایت هر بار تقریباً همان سرآیندها را تکرار میکنند. HPACK هر سرآیند را یک بار میفرستد، آن را در جدولی که دو طرف هماهنگ نگه میدارند ذخیره میکند و پس از آن فقط شمارهاش را میفرستد. درخواست نخست زیر به خاطر جدول ثابت و کد هافمن از متن HTTP/1.1 خودش کوچکتر است؛ درخواست دوم و سوم حدود یک چهارم اندازهاند، چون تقریباً همه چیز اکنون در جدول پویاست.
واردسازی شبکه.اچ تی تی پی۲
تابع سرآیندهای درخواست(مسیر: رشته): اچ تی تی پی۲.فهرست سرآیندها:
ناپایا سرآیندها := اچ تی تی پی۲.فهرست سرآیندها {}
اچ تی تی پی۲.افزودن سرآیند(سرآیندها، ":method"، "GET")
اچ تی تی پی۲.افزودن سرآیند(سرآیندها، ":scheme"، "https")
اچ تی تی پی۲.افزودن سرآیند(سرآیندها، ":authority"، "shop.example.com")
اچ تی تی پی۲.افزودن سرآیند(سرآیندها، ":path"، مسیر)
اچ تی تی پی۲.افزودن سرآیند(سرآیندها، "user-agent"، "salam-client/1.0")
اچ تی تی پی۲.افزودن سرآیند(سرآیندها، "accept"، "application/json")
اچ تی تی پی۲.افزودن سرآیند حساس(سرآیندها، "authorization"، "Bearer eyJhbGciOiJIUzI1NiJ9.e30.x")
برگشت سرآیندها
پایان
تابع اندازه متنی(سرآیندها: اچ تی تی پی۲.فهرست سرآیندها): صحیح:
ناپایا اندازه := ۰
هر مورد در سرآیندها.سرآیندها:
اندازه += مورد.نام.طول() + مورد.مقدار.طول() + ۴
پایان
برگشت اندازه
پایان
تابع ریشه:
ناپایا جدول := اچ تی تی پی۲.جدول پویا جدید(۴۰۹۶)
هر مسیر در ["/cart"، "/cart/items"، "/checkout"]:
سرآیندها := سرآیندهای درخواست(مسیر)
بلوک := اچ تی تی پی۲.کدگذاری فهرست سرآیند(جدول، سرآیندها، درست)
سرچاپ مسیر، "به شکل متن HTTP/1.1:"، اندازه متنی(سرآیندها)، "بایت، HPACK:"، بلوک.طول، "بایت، مدخلهای جدول:"، اچ تی تی پی۲.تعداد جدول پویا(جدول)
پایان
سرچاپ "فقط هافمن، مقدار user-agent:"، "salam-client/1.0".طول()، "->"، اچ تی تی پی۲.طول کدشده متن("salam-client/1.0")
پایانسرآیند authorization با افزودن سرآیند حساس اضافه شده، پس هرگز در جدول نمیرود و هر بار کامل فرستاده میشود. این چند بایت هزینه دارد، ولی جلوی مهاجمی را میگیرد که میتواند روی سرآیندهای دیگر همان اتصال اثر بگذارد و با دیدن اندازهی فشرده توکن را حدس بزند؛ حملهای که به نام CRIME شناخته میشود.
HTTP/2 روی TLS به یک سرور واقعی
سرورهای اینترنت HTTP/2 را فقط روی TLS ارائه میکنند و فقط به کارخواهی که در دستدهی TLS آن را بخواهد. در پیکربندی tls مقدار alpn را h2 بگذارید، با اتصال امن وصل شوید و اتصال را با ترابری امن بپوشانید. اگر سرور h2 را انتخاب نکرده باشد، دستدهی کارخواه شکست میخورد و باید به HTTP/1.1 برگردید.
واردسازی شبکه.اچ تی تی پی۲
واردسازی تی ال اس
تابع ریشه:
میزبان := "www.cloudflare.com"
ناپایا پیکربندی := تی ال اس.پیکربندی جدید(میزبان)
پیکربندی.پروتکل برنامه = "h2"
امن := تی ال اس.اتصال امن(میزبان، ۴۴۳، پیکربندی)
اگر وارونه تی ال اس.اتصال معتبر(امن):
سرچاپ "TLS ناموفق:"، تی ال اس.خطای اتصال(امن)
برگشت ۱
پایان
ناپایا اتصال := اچ تی تی پی۲.اتصال جدید(اچ تی تی پی۲.ترابری امن(امن)، نادرست)
اگر وارونه اچ تی تی پی۲.دستدهی کارخواه(اتصال):
سرچاپ "سرور HTTP/2 را نپذیرفت"
برگشت ۱
پایان
شناسه := اچ تی تی پی۲.شناسه جریان بعدی(اتصال)
ناپایا سرآیندها := اچ تی تی پی۲.فهرست سرآیندها {}
اچ تی تی پی۲.افزودن سرآیند(سرآیندها، ":method"، "HEAD")
اچ تی تی پی۲.افزودن سرآیند(سرآیندها، ":scheme"، "https")
اچ تی تی پی۲.افزودن سرآیند(سرآیندها، ":path"، "/")
اچ تی تی پی۲.افزودن سرآیند(سرآیندها، ":authority"، میزبان)
_ := اچ تی تی پی۲.ارسال سرآیندها(اتصال، شناسه، سرآیندها، درست)
اگر اچ تی تی پی۲.انتظار اتمام جریان(اتصال، شناسه، ۱۰۰):
جریان := اچ تی تی پی۲.جریان با شناسه(اتصال، شناسه)
سرچاپ "وضعیت:"، اچ تی تی پی۲.دریافت سرآیند(جریان.سرآیندها، ":status")
سرچاپ "سرور:"، اچ تی تی پی۲.دریافت سرآیند(جریان.سرآیندها، "server")
سرچاپ "بایتهای بدنه:"، جریان.بدنه.طول
پایان
اچ تی تی پی۲.بستن اتصال(اتصال)
برگشت ۰
پایاناین برنامه به شبکه نیاز دارد، پس اینجا فقط بررسی میشود. در برابر کلادفلر این را چاپ کرد:
وضعیت: 200
سرور: cloudflare
بایتهای بدنه: 0
بدنه خالی است چون درخواست HEAD بود. با GET صفحه به شکل یک بافر در data جریان میرسد، پس از اینکه بسته بهروزرسانیهای پنجره را که کنترل جریان لازم دارد خودش فرستاده است.
گونهها
جریان اچ تی تی پی Stream
ساختار جریان اچ تی تی پی| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| شناسه | id | صحیح = 0 | شناسه؛ فرد برای جریانهایی که کارخواه باز میکند. |
| وضعیت | state | صحیح = 0 | وضعیت، یکی از ثابتهای جریان .... |
| پنجره فرستادن | send_window | صحیح = 65535 | پنجرهی فرستادن. |
| پنجره دریافت | recv_window | صحیح = 65535 | پنجرهی دریافت. |
| سرآیندها | headers | فهرست سرآیندها | سرآیندهای دریافتشده. |
| سرآیندهای پایانی | trailers | فهرست سرآیندها | سرآیندهای پایانی دریافتشده. |
| بدنه | data | compress.ByteBuf | بدنهی دریافتشده. |
| سرآیندها رسیده | got_headers | منطقی = نادرست | سرآیندها رسیدهاند. |
| سرآیندهای پایانی رسیده | got_trailers | منطقی = نادرست | سرآیندهای پایانی رسیدهاند. |
| انتهای جریان | end_stream | منطقی = نادرست | طرف مقابل جریان را تمام کرده. |
| بازنشانیشده | reset | منطقی = نادرست | جریان با قاب بازنشانی بسته شد. |
| کد خطا | error_code | صحیح = 0 | کد خطای بازنشانی. |
| مشغول | live | منطقی = نادرست | این خانهی جدول در استفاده است. |
واردسازی شبکه.اچ تی تی پی۲
واردسازی شبکه.تی سی پی
واردسازی فشرده سازی
ناپایا سرور := تی سی پی.سرور {}
تابع پاسخگو():
ا := تی سی پی.پذیرش(سرور)
ناپایا ک := اچ تی تی پی۲.اتصال جدید(اچ تی تی پی۲.ترابری ساده(ا.توصیفگر)، درست)
اگر وارونه اچ تی تی پی۲.دستدهی سرور(ک):
برگشت
پایان
شناسه := اچ تی تی پی۲.انتظار سرآیند(ک، ۲۰)
ج := اچ تی تی پی۲.جریان با شناسه(ک، شناسه)
ناپایا سر := اچ تی تی پی۲.فهرست سرآیندها {}
اچ تی تی پی۲.افزودن سرآیند(سر، ":status"، "200")
اچ تی تی پی۲.افزودن سرآیند(سر، "content-type"، "text/plain")
_ := اچ تی تی پی۲.ارسال سرآیندها(ک، شناسه، سر، نادرست)
_ := اچ تی تی پی۲.ارسال داده(ک، شناسه، فشرده سازی.بافر از رشته("سلام " + اچ تی تی پی۲.دریافت سرآیند(ج.سرآیندها، ":path"))، نادرست)
ناپایا دنباله := اچ تی تی پی۲.فهرست سرآیندها {}
اچ تی تی پی۲.افزودن سرآیند(دنباله، "x-done"، "1")
_ := اچ تی تی پی۲.ارسال دنبالهها(ک، شناسه، دنباله)
_ := اچ تی تی پی۲.انتظار اتمام جریان(ک، ۰، ۵)
اچ تی تی پی۲.بستن اتصال(ک)
پایان
تابع ریشه:
سرور = تی سی پی.پیوند(۰)
ن := نخساز(پاسخگو)
ا := تی سی پی.شماره گیری("127.0.0.1"، تی سی پی.درگاه(سرور))
ت := اچ تی تی پی۲.ترابری ساده(ا.توصیفگر)
سرچاپ ت.سالم، ت.نوع == اچ تی تی پی۲.انتقال ساده
ناپایا ک := اچ تی تی پی۲.اتصال جدید(ت، نادرست)
سرچاپ اچ تی تی پی۲.دستدهی کارخواه(ک)، اچ تی تی پی۲.اتصال معتبر(ک)
شناسه := اچ تی تی پی۲.شناسه جریان بعدی(ک)
ناپایا سر := اچ تی تی پی۲.فهرست سرآیندها {}
اچ تی تی پی۲.افزودن سرآیند(سر، ":method"، "GET")
اچ تی تی پی۲.افزودن سرآیند(سر، ":scheme"، "http")
اچ تی تی پی۲.افزودن سرآیند(سر، ":path"، "/books")
اچ تی تی پی۲.افزودن سرآیند(سر، ":authority"، "127.0.0.1")
سرچاپ شناسه، اچ تی تی پی۲.ارسال سرآیندها(ک، شناسه، سر، درست)
سرچاپ اچ تی تی پی۲.انتظار اتمام جریان(ک، شناسه، ۲۰)
ج := اچ تی تی پی۲.جریان با شناسه(ک، شناسه)
سرچاپ اچ تی تی پی۲.دریافت سرآیند(ج.سرآیندها، ":status")، فشرده سازی.بافر به رشته(ج.بدنه)، ج.سرآیندهای پایانی رسیده، اچ تی تی پی۲.دریافت سرآیند(ج.سرآیندهای پایانی، "x-done")، ج.انتهای جریان
سرچاپ اچ تی تی پی۲.تعداد جریانها(ک) >= ۱، ک.تنظیمات طرف مقابل.بیشترین اندازه قاب
_ := اچ تی تی پی۲.ارسال پینگ(ک، فشرده سازی.بافر از رشته("abcdefgh"))
سرچاپ اچ تی تی پی۲.دریافت رویداد(ک) >= اچ تی تی پی۲.نتیجه اتصال
_ := اچ تی تی پی۲.ارسال بازنشانی جریان(ک، اچ تی تی پی۲.شناسه جریان بعدی(ک)، اچ تی تی پی۲.کد لغو)
سرچاپ اچ تی تی پی۲.ارسال خداحافظی(ک، اچ تی تی پی۲.کد بدون خطا، "")
اچ تی تی پی۲.بستن اتصال(ک)
نخپیوند(ن)
تی سی پی.بستن سرور(سرور)
پایانجدول جریانها StreamTable
ساختار جدول جریانها| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| جریانها | items | وکتور<جریان اچ تی تی پی> | جریانها. |
نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Conn.salam
اتصال اچ تی تی پی۲ Conn
ساختار اتصال اچ تی تی پی۲| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| ترابری | tx | ترابری | ترابری زیرین. |
| سمت سرور | is_server | منطقی = نادرست | این سو سرور است. |
| جدول فرستادن | enc | جدول پویا | جدول HPACK برای فرستادن. |
| جدول دریافت | dec | جدول پویا | جدول HPACK برای دریافت. |
| تنظیمات محلی | local | تنظیمات | تنظیمات این سو. |
| تنظیمات طرف مقابل | remote | تنظیمات | تنظیمات طرف مقابل، پس از دستدهی. |
| شناسه بعدی | next_id | صحیح = 1 | شناسهی جریان بعدی. |
| جریانها | streams | جدول جریانها | جریانها. |
| پنجره فرستادن | send_window | صحیح = 65535 | پنجرهی فرستادن اتصال. |
| پنجره دریافت | recv_window | صحیح = 65535 | پنجرهی دریافت اتصال. |
| قاب خاتمه | goaway | منطقی = نادرست | قاب پایان رسیده یا فرستاده شده. |
| آخرین کد خطا | last_error | صحیح = 0 | آخرین کد خطا. |
| سالم | ok | منطقی = نادرست | اتصال سالم است. |
| جریان معوق | pending_stream | صحیح = 0 | جریانی که بلوک سرآیندش هنوز با قاب ادامه کامل نشده. |
| بلوک معوق | pending_block | compress.ByteBuf | بخشهای رسیدهی آن بلوک. |
| انتهای جریان معوق | pending_end_stream | منطقی = نادرست | آن سرآیندها جریان را تمام میکنند. |
| پایانی معوق | pending_trailers | منطقی = نادرست | آن سرآیندها پایانیاند. |
نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Conn.salam
قاب Frame
ساختار قاب| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| نوع | kind | صحیح = 0 | نوع قاب، یکی از ثابتهای قاب .... |
| پرچمها | flags | صحیح = 0 | پرچمها. |
| شناسه جریان | stream_id | صحیح = 0 | شناسهی جریان؛ صفر یعنی کل اتصال. |
| بار | payload | compress.ByteBuf | بار قاب. |
| خواندهشده | ok | منطقی = نادرست | قاب درست خوانده شد. |
واردسازی شبکه.اچ تی تی پی۲
واردسازی فشرده سازی
تابع ریشه:
ناپایا ت := اچ تی تی پی۲.تنظیمات پیشفرض()
سرچاپ ت.اندازه جدول سرآیند، ت.اندازه پنجره آغازین، ت.بیشترین اندازه قاب، ت.ارسال بیدرخواست
ق := اچ تی تی پی۲.ساخت قاب تنظیمات(ت)
سرچاپ اچ تی تی پی۲.نام نوع قاب(ق.نوع)، ق.شناسه جریان، ق.بار.طول
ت.بیشترین اندازه قاب = ۳۲۷۶۸
سرچاپ اچ تی تی پی۲.اعمال تنظیمات(ت، اچ تی تی پی۲.ساخت قاب تنظیمات(اچ تی تی پی۲.تنظیمات پیشفرض()))، ت.بیشترین اندازه قاب
تایید := اچ تی تی پی۲.ساخت تایید تنظیمات()
سرچاپ اچ تی تی پی۲.قاب پرچم دارد(تایید، اچ تی تی پی۲.پرچم تایید)
پ := اچ تی تی پی۲.ساخت بهروزرسانی پنجره(۳، ۱۰۲۴)
سرچاپ اچ تی تی پی۲.نام نوع قاب(پ.نوع)، اچ تی تی پی۲.مقدار افزایش پنجره(پ)
ر := اچ تی تی پی۲.ساخت بازنشانی جریان(۵، اچ تی تی پی۲.کد لغو)
سرچاپ اچ تی تی پی۲.کد خطای قاب(ر)، اچ تی تی پی۲.نام خطا(اچ تی تی پی۲.کد خطای قاب(ر))
خ := اچ تی تی پی۲.ساخت خداحافظی(۷، اچ تی تی پی۲.کد بدون خطا، "bye")
سرچاپ اچ تی تی پی۲.نام نوع قاب(خ.نوع)، اچ تی تی پی۲.کد خطای قاب(خ)
پینگ := اچ تی تی پی۲.ساخت پینگ(فشرده سازی.بافر از رشته("12345678")، نادرست)
سرچاپ اچ تی تی پی۲.نام نوع قاب(پینگ.نوع)، پینگ.بار.طول
ناپایا د := اچ تی تی پی۲.قاب جدید(اچ تی تی پی۲.قاب داده، اچ تی تی پی۲.پرچم اتمام جریان، ۱)
فشرده سازی.افزودن بایتها(د.بار، "سلام" برگردان تهی*، ۸)
ناپایا سالم := درست
سرچاپ فشرده سازی.بافر به رشته(اچ تی تی پی۲.داده قاب(د، سالم))، سالم
ب := اچ تی تی پی۲.کدگذاری قاب(د)
سرچاپ ب.طول، فشرده سازی.دریافت بایت(ب، ۳)
ناپایا س := اچ تی تی پی۲.قاب جدید(اچ تی تی پی۲.قاب سرصفحهها، اچ تی تی پی۲.پرچم اتمام سرصفحهها، ۱)
فشرده سازی.افزودن بایت(س.بار، ۱۳۰)
سرچاپ اچ تی تی پی۲.بلوک سرآیند قاب(س، سالم).طول، سالم
ناپایا ع := فشرده سازی.بافر بایت جدید()
اچ تی تی پی۲.درج تنظیم(ع، اچ تی تی پی۲.تنظیم بیشینه اندازه قاب، ۱۶۳۸۴)
سرچاپ ع.طول
اچ تی تی پی۲.آزادسازی قاب(د)
سرچاپ اچ تی تی پی۲.قاب داده، اچ تی تی پی۲.قاب پینگ، اچ تی تی پی۲.کد خطای پروتکل، اچ تی تی پی۲.اندازه پیشفرض قاب، اچ تی تی پی۲.پنجره پیشفرض، اچ تی تی پی۲.سقف اندازه قاب
سرچاپ اچ تی تی پی۲.نام نوع قاب(اچ تی تی پی۲.قاب اولویت)، اچ تی تی پی۲.نام نوع قاب(اچ تی تی پی۲.قاب بازنشانی جریان)، اچ تی تی پی۲.نام نوع قاب(اچ تی تی پی۲.قاب وعده ارسال)
سرچاپ اچ تی تی پی۲.نام نوع قاب(اچ تی تی پی۲.قاب ترک اتصال)، اچ تی تی پی۲.نام نوع قاب(اچ تی تی پی۲.قاب بهروزرسانی پنجره)، اچ تی تی پی۲.نام نوع قاب(اچ تی تی پی۲.قاب ادامه)
سرچاپ اچ تی تی پی۲.تنظیم اندازه جدول سرصفحه، اچ تی تی پی۲.تنظیم فعالسازی ارسال، اچ تی تی پی۲.تنظیم بیشینه جریانهای همزمان، اچ تی تی پی۲.تنظیم اندازه آغازین پنجره، اچ تی تی پی۲.تنظیم بیشینه اندازه فهرست سرصفحه
سرچاپ اچ تی تی پی۲.نام خطا(اچ تی تی پی۲.کد خطای داخلی)، اچ تی تی پی۲.نام خطا(اچ تی تی پی۲.کد خطای کنترل جریان)، اچ تی تی پی۲.نام خطا(اچ تی تی پی۲.کد مهلت تنظیمات)، اچ تی تی پی۲.نام خطا(اچ تی تی پی۲.کد جریان بستهشده)
سرچاپ اچ تی تی پی۲.نام خطا(اچ تی تی پی۲.کد خطای اندازه قاب)، اچ تی تی پی۲.نام خطا(اچ تی تی پی۲.کد جریان ردشده)، اچ تی تی پی۲.نام خطا(اچ تی تی پی۲.کد خطای فشردهسازی)، اچ تی تی پی۲.نام خطا(اچ تی تی پی۲.کد خطای اتصال)
سرچاپ اچ تی تی پی۲.نام خطا(اچ تی تی پی۲.کد درخواست آرامش)، اچ تی تی پی۲.نام خطا(اچ تی تی پی۲.کد امنیت ناکافی)، اچ تی تی پی۲.نام خطا(اچ تی تی پی۲.کد نیاز به اچتیتیپی۱۱)
سرچاپ اچ تی تی پی۲.جریان بیکار، اچ تی تی پی۲.جریان باز، اچ تی تی پی۲.جریان نیمهبسته محلی، اچ تی تی پی۲.جریان نیمهبسته دور، اچ تی تی پی۲.وضعیت جریان بستهشده
سرچاپ اچ تی تی پی۲.اندازه پیشفرض جدول، اچ تی تی پی۲.نتیجه خطا
پایانسرآیند Header
ساختار سرآیند| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| نام | name | رشته = "" | نام؛ در HTTP/2 همیشه با حروف کوچک. |
| مقدار | value | رشته = "" | مقدار. |
| حساس | sensitive | منطقی = نادرست | حساس است و هرگز در جدول HPACK نمیرود؛ برای توکنها و کوکیها. |
واردسازی شبکه.اچ تی تی پی۲
واردسازی فشرده سازی
تابع ریشه:
ناپایا فهرست := اچ تی تی پی۲.فهرست سرآیندها {}
اچ تی تی پی۲.افزودن سرآیند(فهرست، ":method"، "GET")
اچ تی تی پی۲.افزودن سرآیند(فهرست، ":path"، "/")
اچ تی تی پی۲.افزودن سرآیند(فهرست، "user-agent"، "salam")
اچ تی تی پی۲.افزودن سرآیند حساس(فهرست، "authorization"، "Bearer x")
سرچاپ اچ تی تی پی۲.تعداد سرآیندها(فهرست)، اچ تی تی پی۲.دریافت سرآیند(فهرست، ":path")، اچ تی تی پی۲.سرآیند دارد(فهرست، "cookie")
ناپایا فرستنده := اچ تی تی پی۲.جدول پویا جدید(۴۰۹۶)
ناپایا گیرنده := اچ تی تی پی۲.جدول پویا جدید(۴۰۹۶)
بلوک := اچ تی تی پی۲.کدگذاری فهرست سرآیند(فرستنده، فهرست، درست)
سرچاپ بلوک.طول، اچ تی تی پی۲.تعداد جدول پویا(فرستنده)، اچ تی تی پی۲.اندازه جدول پویا(فرستنده)
ناپایا سالم := درست
خوانده := اچ تی تی پی۲.کدگشایی فهرست سرآیند(گیرنده، بلوک، سالم)
سرچاپ سالم، خوانده.سرآیندها.طول()، خوانده.سرآیندها[۲].نام، خوانده.سرآیندها[۲].مقدار، خوانده.سرآیندها[۳].حساس
بلوک۲ := اچ تی تی پی۲.کدگذاری فهرست سرآیند(فرستنده، فهرست، درست)
سرچاپ بلوک۲.طول < بلوک.طول
ث := اچ تی تی پی۲.دریافت از جدول ثابت(۲)
سرچاپ ث.نام، ث.مقدار، اچ تی تی پی۲.شمار جدول ایستای اچپک، اچ تی تی پی۲.سربار مدخل اچپک
پ := اچ تی تی پی۲.دریافت از جدول پویا(گیرنده، ۱)
سرچاپ پ.نام
ناپایا دقیق := نادرست
سرچاپ اچ تی تی پی۲.جستجوی جدول(گیرنده، ":method"، "GET"، دقیق)، دقیق
سرچاپ اچ تی تی پی۲.دریافت از جدول(گیرنده، ۶۲، سالم).نام، سالم
ناپایا ب := فشرده سازی.بافر بایت جدید()
اچ تی تی پی۲.کدگذاری تغییر اندازه جدول(ب، فرستنده، ۲۵۶)
اچ تی تی پی۲.تنظیم اندازه جدول(گیرنده، ۲۵۶)
سرچاپ ب.طول، فرستنده.بیشترین اندازه، گیرنده.بیشترین اندازه
ناپایا ب۲ := فشرده سازی.بافر بایت جدید()
اچ تی تی پی۲.کدگذاری سرآیند(ب۲، فرستنده، اچ تی تی پی۲.سرآیند جدید("x-id"، "7")، نادرست)
اچ تی تی پی۲.درج در جدول پویا(گیرنده، اچ تی تی پی۲.سرآیند حساس("k"، "v"))
سرچاپ ب۲.طول، اچ تی تی پی۲.تعداد جدول پویا(گیرنده)
پایانفهرست سرآیندها HeaderList
ساختار فهرست سرآیندها| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| سرآیندها | items | وکتور<سرآیند> | سرآیندها. |
نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Hpack.salam
جدول پویا DynTable
ساختار جدول پویا| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| مدخلها | items | وکتور<سرآیند> | مدخلها. |
| جای تازهترین | head | صحیح = 0 | جای تازهترین مدخل در حلقه. |
| اندازه | size | صحیح = 0 | اندازهی فعلی بر حسب بایت، با سربار. |
| بیشترین اندازه | max_size | صحیح = 4096 | بیشترین اندازه؛ مدخلهای قدیمی بیرون رانده میشوند. |
نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Hpack.salam
جدولهای هافمن HufTables
ساختار جدولهای هافمن| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| شمار کدها | counts | وکتور<صحیح> | شمار کدها در هر طول. |
| نخستین کدها | first | وکتور<صحیح> | نخستین کد هر طول. |
| نمادها | syms | وکتور<صحیح> | نمادها به ترتیب کد. |
| آماده | ready | منطقی = نادرست | جدولها ساخته شدهاند. |
واردسازی شبکه.اچ تی تی پی۲
واردسازی کدگذاری
واردسازی فشرده سازی
تابع ریشه:
ب := اچ تی تی پی۲.کدگذاری متن هافمن("www.example.com")
سرچاپ کدگذاری.کدگذاری شانزده(فشرده سازی.بافر به رشته(ب))
سرچاپ اچ تی تی پی۲.طول کدشده متن("www.example.com")، "www.example.com".طول()
ناپایا سالم := درست
سرچاپ فشرده سازی.بافر به رشته(اچ تی تی پی۲.کدگشایی بافر هافمن(ب، سالم))، سالم
متن := فشرده سازی.بافر از رشته("no-cache")
سرچاپ اچ تی تی پی۲.طول کدشده هافمن(متن.داده، متن.طول)
ناپایا خروجی := فشرده سازی.بافر بایت جدید()
فشرده سازی.افزودن بایت(خروجی، ۰)
اچ تی تی پی۲.کدگذاری هافمن(خروجی، متن.داده، متن.طول)
سرچاپ فشرده سازی.بافر به رشته(اچ تی تی پی۲.کدگشایی هافمن(خروجی، ۱، خروجی.طول - ۱، سالم))، سالم
پایانجعبه امن TlsBox
ساختار جعبه امن| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| اتصالها | items | وکتور | اتصالها. |
واردسازی شبکه.اچ تی تی پی۲
واردسازی شبکه.تی سی پی
تابع ریشه:
امن := تی سی پی.شماره گیری امن("example.com"، ۴۴۳)
ناپایا ک := اچ تی تی پی۲.اتصال جدید(اچ تی تی پی۲.ترابری امن(امن)، نادرست)
سرچاپ اچ تی تی پی۲.دستدهی کارخواه(ک)، ک.ترابری.نوع == اچ تی تی پی۲.انتقال امن
اچ تی تی پی۲.بستن اتصال(ک)
پایانتنظیمات Settings
ساختار تنظیمات| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| اندازه جدول سرآیند | header_table_size | صحیح = 4096 | اندازهی جدول HPACK. |
| ارسال بیدرخواست | enable_push | صحیح = 1 | ارسال بیدرخواست؛ ۱ یا ۰. |
| بیشترین جریان همزمان | max_concurrent_streams | صحیح = -1 | بیشترین جریان همزمان؛ ۱- یعنی بیحد. |
| اندازه پنجره آغازین | initial_window_size | صحیح = 65535 | پنجرهی آغازین. |
| بیشترین اندازه قاب | max_frame_size | صحیح = 16384 | بیشترین اندازهی قاب. |
| بیشترین اندازه سرآیندها | max_header_list_size | صحیح = -1 | بیشترین اندازهی سرآیندها؛ ۱- یعنی بیحد. |
نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
ترابری Transport
ساختار ترابری| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| نوع | kind | صحیح = 0 | نوع ترابری. |
| توصیفگر | fd | صحیح۶۴ = -1 | توصیفگر سوکت. |
| شماره اتصال امن | sec_id | صحیح = -1 | شمارهی اتصال TLS در ظرف داخلی. |
| سالم | ok | منطقی = نادرست | ترابری سالم است. |
نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Conn.salam
پایاها و متغیرها
نتیجه خطا H2_POLL_ERROR
پایا نتیجه خطا: صحیح۳۲ = -1دریافت رویداد: خطا یا بسته شدن اتصال.نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
نتیجه اتصال H2_POLL_CONNECTION
پایا نتیجه اتصال: صحیح۳۲ = 0دریافت رویداد: قابی برای کل اتصال رسید. عدد مثبت شناسهی جریانی است که قابش رسیده.نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Conn.salam
پیشدرآمد اچتیتیپی۲ H2_PREFACE
پایا پیشدرآمد اچتیتیپی۲: رشته = "PRI * HTTP/2.0
SM
"واردسازی شبکه.اچ تی تی پی۲
واردسازی شبکه.تی سی پی
واردسازی فشرده سازی
ناپایا سرور := تی سی پی.سرور {}
تابع پاسخگو():
ا := تی سی پی.پذیرش(سرور)
ناپایا ت := اچ تی تی پی۲.ترابری ساده(ا.توصیفگر)
سرچاپ "سرور پیشدرآمد:"، اچ تی تی پی۲.خواندن پیشدرآمد(ت)
ق := اچ تی تی پی۲.خواندن قاب(ت، اچ تی تی پی۲.اندازه پیشفرض قاب)
سرچاپ "سرور قاب:"، ق.خواندهشده، اچ تی تی پی۲.نام نوع قاب(ق.نوع)، ق.شناسه جریان، فشرده سازی.بافر به رشته(ق.بار)
اچ تی تی پی۲.بستن ترابری(ت)
پایان
تابع ریشه:
سرور = تی سی پی.پیوند(۰)
ن := نخساز(پاسخگو)
ا := تی سی پی.شماره گیری("127.0.0.1"، تی سی پی.درگاه(سرور))
ناپایا ت := اچ تی تی پی۲.ترابری ساده(ا.توصیفگر)
_ := اچ تی تی پی۲.نوشتن پیشدرآمد(ت)
ناپایا د := اچ تی تی پی۲.قاب جدید(اچ تی تی پی۲.قاب داده، ۰، ۳)
فشرده سازی.افزودن بافر(د.بار، فشرده سازی.بافر از رشته("hi"))
_ := اچ تی تی پی۲.نوشتن قاب(ت، د)
نخپیوند(ن)
اچ تی تی پی۲.بستن ترابری(ت)
تی سی پی.بستن سرور(سرور)
سرچاپ اچ تی تی پی۲.پیشدرآمد اچتیتیپی۲.طول()
پایانقاب داده H2_DATA
پایا قاب داده: صحیح۳۲ = 0نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
قاب سرصفحهها H2_HEADERS
پایا قاب سرصفحهها: صحیح۳۲ = 1نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
قاب اولویت H2_PRIORITY
پایا قاب اولویت: صحیح۳۲ = 2نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
قاب بازنشانی جریان H2_RST_STREAM
پایا قاب بازنشانی جریان: صحیح۳۲ = 3نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
قاب تنظیمات H2_SETTINGS
پایا قاب تنظیمات: صحیح۳۲ = 4نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
قاب وعده ارسال H2_PUSH_PROMISE
پایا قاب وعده ارسال: صحیح۳۲ = 5نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
قاب پینگ H2_PING
پایا قاب پینگ: صحیح۳۲ = 6نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
قاب ترک اتصال H2_GOAWAY
پایا قاب ترک اتصال: صحیح۳۲ = 7نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
قاب بهروزرسانی پنجره H2_WINDOW_UPDATE
پایا قاب بهروزرسانی پنجره: صحیح۳۲ = 8نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
قاب ادامه H2_CONTINUATION
پایا قاب ادامه: صحیح۳۲ = 9نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
پرچمهای قاب H2_FLAG_…
پرچم اتمام جریان و پرچم تایید هر دو ۱ هستند، یکی برای قاب داده و سرآیند و دیگری برای تنظیمات و پینگ. با قاب پرچم دارد بررسیشان کنید.| نام | انگلیسی | مقدار |
|---|---|---|
| پرچم اتمام جریان | H2_FLAG_END_STREAM | 1 |
| پرچم تایید | H2_FLAG_ACK | 1 |
| پرچم اتمام سرصفحهها | H2_FLAG_END_HEADERS | 4 |
| پرچم لایهگذاری | H2_FLAG_PADDED | 8 |
| پرچم اولویت | H2_FLAG_PRIORITY | 32 |
نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
تنظیم اندازه جدول سرصفحه H2_SETTINGS_HEADER_TABLE_SIZE
پایا تنظیم اندازه جدول سرصفحه: صحیح۳۲ = 1نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
تنظیم فعالسازی ارسال H2_SETTINGS_ENABLE_PUSH
پایا تنظیم فعالسازی ارسال: صحیح۳۲ = 2نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
تنظیم بیشینه جریانهای همزمان H2_SETTINGS_MAX_CONCURRENT_STREAMS
پایا تنظیم بیشینه جریانهای همزمان: صحیح۳۲ = 3نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
تنظیم اندازه آغازین پنجره H2_SETTINGS_INITIAL_WINDOW_SIZE
پایا تنظیم اندازه آغازین پنجره: صحیح۳۲ = 4نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
تنظیم بیشینه اندازه قاب H2_SETTINGS_MAX_FRAME_SIZE
پایا تنظیم بیشینه اندازه قاب: صحیح۳۲ = 5نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
تنظیم بیشینه اندازه فهرست سرصفحه H2_SETTINGS_MAX_HEADER_LIST_SIZE
پایا تنظیم بیشینه اندازه فهرست سرصفحه: صحیح۳۲ = 6نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
کد بدون خطا H2_NO_ERROR
پایا کد بدون خطا: صحیح۳۲ = 0نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
کد خطای پروتکل H2_PROTOCOL_ERROR
پایا کد خطای پروتکل: صحیح۳۲ = 1نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
کد خطای داخلی H2_INTERNAL_ERROR
پایا کد خطای داخلی: صحیح۳۲ = 2نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
کد خطای کنترل جریان H2_FLOW_CONTROL_ERROR
پایا کد خطای کنترل جریان: صحیح۳۲ = 3نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
کد مهلت تنظیمات H2_SETTINGS_TIMEOUT
پایا کد مهلت تنظیمات: صحیح۳۲ = 4نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
کد جریان بستهشده H2_STREAM_CLOSED
پایا کد جریان بستهشده: صحیح۳۲ = 5نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
کد خطای اندازه قاب H2_FRAME_SIZE_ERROR
پایا کد خطای اندازه قاب: صحیح۳۲ = 6نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
کد جریان ردشده H2_REFUSED_STREAM
پایا کد جریان ردشده: صحیح۳۲ = 7نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
کد لغو H2_CANCEL
پایا کد لغو: صحیح۳۲ = 8نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
کد خطای فشردهسازی H2_COMPRESSION_ERROR
پایا کد خطای فشردهسازی: صحیح۳۲ = 9نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
کد خطای اتصال H2_CONNECT_ERROR
پایا کد خطای اتصال: صحیح۳۲ = 10نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
کد درخواست آرامش H2_ENHANCE_YOUR_CALM
پایا کد درخواست آرامش: صحیح۳۲ = 11نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
کد امنیت ناکافی H2_INADEQUATE_SECURITY
پایا کد امنیت ناکافی: صحیح۳۲ = 12نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
کد نیاز به اچتیتیپی۱۱ H2_HTTP_1_1_REQUIRED
پایا کد نیاز به اچتیتیپی۱۱: صحیح۳۲ = 13نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
اندازه پیشفرض قاب H2_DEFAULT_FRAME_SIZE
پایا اندازه پیشفرض قاب: صحیح۳۲ = 16384نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
پنجره پیشفرض H2_DEFAULT_WINDOW
پایا پنجره پیشفرض: صحیح۳۲ = 65535نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
اندازه پیشفرض جدول H2_DEFAULT_TABLE_SIZE
پایا اندازه پیشفرض جدول: صحیح۳۲ = 4096نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
سقف اندازه قاب H2_MAX_FRAME_LIMIT
پایا سقف اندازه قاب: صحیح۳۲ = 16777215نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
جریان بیکار H2_STREAM_IDLE
پایا جریان بیکار: صحیح۳۲ = 0نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
جریان باز H2_STREAM_OPEN
پایا جریان باز: صحیح۳۲ = 1نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
جریان نیمهبسته محلی H2_STREAM_HALF_CLOSED_LOCAL
پایا جریان نیمهبسته محلی: صحیح۳۲ = 2نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
جریان نیمهبسته دور H2_STREAM_HALF_CLOSED_REMOTE
پایا جریان نیمهبسته دور: صحیح۳۲ = 3نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
وضعیت جریان بستهشده H2_STREAM_CLOSED_STATE
پایا وضعیت جریان بستهشده: صحیح۳۲ = 4نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
شمار جدول ایستای اچپک HPACK_STATIC_COUNT
پایا شمار جدول ایستای اچپک: صحیح۳۲ = 61نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Hpack.salam
سربار مدخل اچپک HPACK_ENTRY_OVERHEAD
پایا سربار مدخل اچپک: صحیح۳۲ = 32نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Hpack.salam
انتقال ساده H2_TRANSPORT_PLAIN
پایا انتقال ساده: صحیح۳۲ = 0نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Conn.salam
انتقال امن H2_TRANSPORT_TLS
پایا انتقال امن: صحیح۳۲ = 1نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-TLS.salam
تابعها
اتصال جدید NewConn
تابع اتصال جدید(t: ترابری، is_server: منطقی): اتصال اچ تی تی پی۲نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Conn.salam
دستدهی کارخواه ClientHandshake
تابع دستدهی کارخواه(c &: اتصال اچ تی تی پی۲): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Conn.salam
دستدهی سرور ServerHandshake
تابع دستدهی سرور(c &: اتصال اچ تی تی پی۲): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Conn.salam
شناسه جریان بعدی NextStreamId
تابع شناسه جریان بعدی(c &: اتصال اچ تی تی پی۲): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Conn.salam
جریان با شناسه StreamAt
تابع جریان با شناسه(c: اتصال اچ تی تی پی۲، id: صحیح): جریان اچ تی تی پینمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Conn.salam
تعداد جریانها StreamCount
تابع تعداد جریانها(c: اتصال اچ تی تی پی۲): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Conn.salam
اتصال معتبر ConnOk
تابع اتصال معتبر(c: اتصال اچ تی تی پی۲): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Conn.salam
ارسال سرآیندها SendHeaders
تابع ارسال سرآیندها(c &: اتصال اچ تی تی پی۲، stream_id: صحیح، hl: فهرست سرآیندها، end_stream: منطقی): منطقیدرست بدهید تا جریان همینجا تمام شود.نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Conn.salam
ارسال دنبالهها SendTrailers
تابع ارسال دنبالهها(c &: اتصال اچ تی تی پی۲، stream_id: صحیح، hl: فهرست سرآیندها): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Conn.salam
ارسال داده SendData
تابع ارسال داده(c &: اتصال اچ تی تی پی۲، stream_id: صحیح، body: compress.ByteBuf، end_stream: منطقی): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Conn.salam
ارسال بازنشانی جریان SendRstStream
تابع ارسال بازنشانی جریان(c &: اتصال اچ تی تی پی۲، stream_id: صحیح، error_code: صحیح): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Conn.salam
ارسال خداحافظی SendGoAway
تابع ارسال خداحافظی(c &: اتصال اچ تی تی پی۲، error_code: صحیح، debug: رشته): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Conn.salam
ارسال پینگ SendPing
تابع ارسال پینگ(c &: اتصال اچ تی تی پی۲، payload: compress.ByteBuf): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Conn.salam
دریافت رویداد Poll
تابع دریافت رویداد(c &: اتصال اچ تی تی پی۲): صحیحنتیجه ... را برمیگرداند.نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Conn.salam
انتظار اتمام جریان AwaitStreamEnd
تابع انتظار اتمام جریان(c &: اتصال اچ تی تی پی۲، stream_id: صحیح، max_frames: صحیح): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Conn.salam
انتظار سرآیند AwaitAnyHeaders
تابع انتظار سرآیند(c &: اتصال اچ تی تی پی۲، max_frames: صحیح): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Conn.salam
بستن اتصال CloseConn
تابع بستن اتصال(c &: اتصال اچ تی تی پی۲)نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Conn.salam
طول کدشده هافمن HuffmanEncodedLen
تابع طول کدشده هافمن(p: تهی*، n: صحیح): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Huffman.salam
طول کدشده متن HuffmanEncodedLenStr
تابع طول کدشده متن(s: رشته): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Huffman.salam
کدگذاری هافمن HuffmanEncode
تابع کدگذاری هافمن(out &: compress.ByteBuf، p: تهی*، n: صحیح)نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Huffman.salam
کدگذاری متن هافمن HuffmanEncodeStr
تابع کدگذاری متن هافمن(s: رشته): compress.ByteBufنمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Huffman.salam
کدگشایی هافمن HuffmanDecode
تابع کدگشایی هافمن(src: compress.ByteBuf، from: صحیح، len: صحیح، ok &: منطقی): compress.ByteBufسالم نادرست میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Huffman.salam
کدگشایی بافر هافمن HuffmanDecodeBuf
تابع کدگشایی بافر هافمن(src: compress.ByteBuf، ok &: منطقی): compress.ByteBufنمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Huffman.salam
نام نوع قاب FrameTypeName
تابع نام نوع قاب(kind: صحیح): رشتهDATA.نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
نام خطا ErrorName
تابع نام خطا(code: صحیح): رشتهCANCEL.نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
سرآیند جدید NewHeader
تابع سرآیند جدید(name: رشته، value: رشته): سرآیندنمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Hpack.salam
سرآیند حساس NewSensitiveHeader
تابع سرآیند حساس(name: رشته، value: رشته): سرآیندنمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Hpack.salam
افزودن سرآیند HeadersAdd
تابع افزودن سرآیند(hl &: فهرست سرآیندها، name: رشته، value: رشته)نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Hpack.salam
افزودن سرآیند حساس HeadersAddSensitive
تابع افزودن سرآیند حساس(hl &: فهرست سرآیندها، name: رشته، value: رشته)نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Hpack.salam
دریافت سرآیند HeadersGet
تابع دریافت سرآیند(hl: فهرست سرآیندها، name: رشته): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Hpack.salam
سرآیند دارد HeadersHas
تابع سرآیند دارد(hl: فهرست سرآیندها، name: رشته): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Hpack.salam
تعداد سرآیندها HeadersCount
تابع تعداد سرآیندها(hl: فهرست سرآیندها): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Hpack.salam
تنظیمات پیشفرض DefaultSettings
تابع تنظیمات پیشفرض(): تنظیماتنمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
جدول پویا جدید NewDynTable
تابع جدول پویا جدید(max_size: صحیح): جدول پویانمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Hpack.salam
تعداد جدول پویا DynCount
تابع تعداد جدول پویا(t: جدول پویا): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Hpack.salam
اندازه جدول پویا DynSize
تابع اندازه جدول پویا(t: جدول پویا): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Hpack.salam
دریافت از جدول پویا DynGet
تابع دریافت از جدول پویا(t: جدول پویا، index: صحیح): سرآیندنمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Hpack.salam
درج در جدول پویا DynInsert
تابع درج در جدول پویا(t &: جدول پویا، h: سرآیند)نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Hpack.salam
تنظیم اندازه جدول DynSetMaxSize
تابع تنظیم اندازه جدول(t &: جدول پویا، max_size: صحیح)نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Hpack.salam
دریافت از جدول ثابت StaticGet
تابع دریافت از جدول ثابت(index: صحیح): سرآیند:method GET است.نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Hpack.salam
دریافت از جدول TableGet
تابع دریافت از جدول(t: جدول پویا، index: صحیح، ok &: منطقی): سرآیندنمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Hpack.salam
جستجوی جدول TableFind
تابع جستجوی جدول(t: جدول پویا، name: رشته، value: رشته، exact &: منطقی): صحیحدقیق نادرست میشود. اگر نباشد، صفر.نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Hpack.salam
کدگذاری سرآیند EncodeHeader
تابع کدگذاری سرآیند(out &: compress.ByteBuf، t &: جدول پویا، h: سرآیند، use_huffman: منطقی)نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Hpack.salam
کدگذاری فهرست سرآیند EncodeHeaderList
تابع کدگذاری فهرست سرآیند(t &: جدول پویا، hl: فهرست سرآیندها، use_huffman: منطقی): compress.ByteBufنمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Hpack.salam
کدگذاری تغییر اندازه جدول EncodeTableSizeUpdate
تابع کدگذاری تغییر اندازه جدول(out &: compress.ByteBuf، t &: جدول پویا، new_size: صحیح)نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Hpack.salam
کدگشایی فهرست سرآیند DecodeHeaderList
تابع کدگشایی فهرست سرآیند(t &: جدول پویا، block: compress.ByteBuf، ok &: منطقی): فهرست سرآیندهانمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Hpack.salam
ترابری ساده PlainTransport
تابع ترابری ساده(fd: صحیح۶۴): ترابرینمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Conn.salam
ترابری امن TLSTransport
تابع ترابری امن(c: tls.اتصال اچ تی تی پی۲): ترابرینمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-TLS.salam
بستن ترابری CloseTransport
تابع بستن ترابری(t &: ترابری)نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Transport.salam
قاب جدید NewFrame
تابع قاب جدید(kind: صحیح، flags: صحیح، stream_id: صحیح): قابنمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
آزادسازی قاب FreeFrame
تابع آزادسازی قاب(f &: قاب)نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
قاب پرچم دارد FrameHasFlag
تابع قاب پرچم دارد(f: قاب، flag: صحیح): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
کدگذاری قاب FrameEncode
تابع کدگذاری قاب(f: قاب): compress.ByteBufنمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
نوشتن قاب WriteFrame
تابع نوشتن قاب(t &: ترابری، f: قاب): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Transport.salam
خواندن قاب ReadFrame
تابع خواندن قاب(t &: ترابری، max_frame_size: صحیح): قابنمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Transport.salam
نوشتن پیشدرآمد WritePreface
تابع نوشتن پیشدرآمد(t &: ترابری): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Transport.salam
خواندن پیشدرآمد ReadPreface
تابع خواندن پیشدرآمد(t &: ترابری): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Transport.salam
بلوک سرآیند قاب HeaderBlockOf
تابع بلوک سرآیند قاب(f: قاب، ok &: منطقی): compress.ByteBufنمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
داده قاب DataOf
تابع داده قاب(f: قاب، ok &: منطقی): compress.ByteBufنمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
ساخت قاب تنظیمات MakeSettingsFrame
تابع ساخت قاب تنظیمات(s: تنظیمات): قابنمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
ساخت تایید تنظیمات MakeSettingsAck
تابع ساخت تایید تنظیمات(): قابنمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
اعمال تنظیمات ApplySettings
تابع اعمال تنظیمات(s &: تنظیمات، f: قاب): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
ساخت بهروزرسانی پنجره MakeWindowUpdate
تابع ساخت بهروزرسانی پنجره(stream_id: صحیح، increment: صحیح): قابنمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
مقدار افزایش پنجره WindowIncrementOf
تابع مقدار افزایش پنجره(f: قاب): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
ساخت بازنشانی جریان MakeRstStream
تابع ساخت بازنشانی جریان(stream_id: صحیح، error_code: صحیح): قابنمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
کد خطای قاب ErrorCodeOf
تابع کد خطای قاب(f: قاب): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
ساخت خداحافظی MakeGoAway
تابع ساخت خداحافظی(last_stream_id: صحیح، error_code: صحیح، debug: رشته): قابنمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
ساخت پینگ MakePing
تابع ساخت پینگ(payload: compress.ByteBuf، ack: منطقی): قابنمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam
درج تنظیم PutSetting
تابع درج تنظیم(out &: compress.ByteBuf، id: صحیح، v: صحیح)نمونهی این مورد همراه با موارد بالاتر آمده است: net-http2-Frame.salam