got نسخهٔ ۱۶: کلاینت HTTP/2 داخلی
خلاصهٔ کاملتر
به گفتهٔ sindresorhus، بزرگترین تغییر نسخهٔ ۱۶ کتابخونهٔ got اینه که پشتیبانی HTTP/2 از صفر بازنویسی شده و حالا داخل خود کتابخونهست. یعنی دیگه لازم نیست پکیج http2-wrapper رو نصب کنی. این کلاینت داخلی مذاکرهٔ ALPN (یعنی همون مرحلهای که کلاینت و سرور سر پروتکل به توافق میرسن)، کش نشست با multiplexing، بازنشستگی GOAWAY، تریلرهای درخواست و پاسخ و پاسخهای اطلاعاتی 1xx رو پشتیبانی میکنه.
مهاجرتش هم سادهست. قبلاً باید http2-wrapper رو import میکردی و به آپشن request میدادی، ولی حالا فقط کافیه http2 رو true کنی:
const {statusCode} = await got(url, {http2: true});
console.log(statusCode);یه نکتهٔ مهم موقع بالا بردن نسخه: هدرهای پاسخ دیگه pseudo-header های HTTP/2 رو ندارن، پس بهجای response.headers[':status'] باید سراغ response.statusCode بری. پشتیبانی از پراکسی HTTP/2 هم کلاً برداشته شده، چون از همون http2-wrapper میاومد.
یه تغییر شکنندهٔ دیگه سمت امنیته. اگه یه هوک beforeRequest، یه retry تو afterResponse یا یه مرحلهٔ pagination درخواست رو به origin دیگهای ببره، حالا got هدرهای authorization، cookie، host و proxy-authorization رو حذف میکنه، credentialهای داخل URL رو دور میندازه و بدنهٔ دستنخورده رو خالی میکنه. اگه واقعاً میخوای اینها از مرز origin رد بشن، باید صریح داخل هوک ستشون کنی. همین قانون سراغ copyPipedHeaders هم رفته.
کش DNS هم بازنویسی شده و وابستگی cacheable-lookup حذف شده. dnsCache: true هنوز کار میکنه ولی از کش خود got استفاده میکنه، و چون رکوردهای A و AAAA رو جدا resolve میکنه ترتیب verbatim سیستمعامل رو نگه نمیداره. متد HTTP جدید QUERY هم با got.query() و got.stream.query() اضافه شده که چون safe و idempotent ـه پیشفرض retry میشه. در کنارش آپشنهای قدیمی searchParameters، auth و آپشن قدیمی دنبال کردن ریدایرکت که فقط پیام راهنما میدادن، حالا خطا پرت میکنن.
نکات کلیدی:
- کلاینت HTTP/2 داخل got قرار گرفت و وابستگیهای http2-wrapper و cacheable-lookup حذف شدن
- بهجای response.headers[':status'] باید از response.statusCode استفاده کرد
- عبور درخواست از مرز origin تو هوکها، هدرهای احراز هویت و بدنه رو پاک میکنه
- متد جدید QUERY با got.query() اضافه شد و پیشفرض retry میشه
- آپشنهای قدیمی searchParameters و auth و آپشن دنبال کردن ریدایرکت حالا خطا میدن
- timeout.socket موقع مذاکرهٔ TLS و راهاندازی نشست HTTP/2 هم اعمال میشه




