Një artikull nga kategoria e "shënimet anësore".
TL: DR:
http2_max_field_size 8k; # всех спасет!
Në një nga projektet, pasi ndryshova një logjikë të brendshme të backend-it, fillova të vëzhgoja një kod të çuditshëm përgjigjeje në regjistrat, përkatësisht 0. Në regjistrat duket diçka si kjo:
{
"timestamp": "2020-01-17T08:41:51+00:00",
"remote_addr": "zzz.zzz.zzz.zzz",
"request_time": 0,
"upstream_response_time": "",
"upstream_header_time": "",
"http_accept_language": "-language",
"response_status": 0,
"request": "",
"host": "example.com",
"upstream_addr": "",
"http_referrer": "",
"request_length": 5854,
"bytes_sent": 0,
"http_user_agent": ""
}
Leximi i dokumentacionit dhe kërkimi në google për këtë temë nuk dhanë absolutisht asgjë - sepse ... Thuhet se kjo sjellje ndodh kur klienti mbylli lidhjen pa kaluar kokat. Epo, dhe gjëra të ndryshme ekzotike me madhësinë e tamponit për wsgi_, të cilat në rastin tonë nuk i përshtateshin fjalës "në asnjë mënyrë".
Në përgjithësi, ne vendosëm që problemi nuk është problem, duke marrë parasysh faktin se në vëllimet tona nuk është aspak kritik.
Pikërisht derisa u hutova nga problemi i mëposhtëm: në disa raste, lidhjet hapen pa probleme përmes http, por refuzojnë plotësisht të punojnë përmes https, duke prodhuar mrekullinë: Lidhja #0 me hostin example.com ka mbetur e paprekur
curl: (52) Përgjigje boshe nga serveri
Në regjistrat, ne ishim në gjendje ta gjurmojmë këtë gjë vetëm me IP - nuk kishte asnjë kërkesë ose ndonjë të dhënë tjetër, siç mund të shihet nga shembulli i mësipërm. Vetëm statusi famëkeq është 0, por e di që nuk e kam ndërprerë kërkesën! Fillova të kuptoj se çfarë mund të shkojë keq. Dhe gjithçka doli të ishte shumë e thjeshtë:
degjo 443 ssl http2 prapambetura=8192;
Epo, nëse përdorni http2 për lidhjet ssl, atëherë nuk mjafton vetëm të konfiguroni buferat e kërkesave, ato gjithashtu duhet të konfigurohen në ngx_http_v2_module, përkatësisht:
Синтаксис: http2_max_field_size размер;
Умолчание: http2_max_field_size 4k;
Контекст: http, server
Kufizon madhësinë maksimale të kokës së kërkesës të ngjeshur duke përdorur HPACK. Kufizimi zbatohet njëlloj si për emrin ashtu edhe për vlerën. Nëse përdoret kodimi Huffman, madhësia aktuale e vargjeve të emrit dhe vlerave të papaketuara mund të jetë më e madhe. Kufiri i paracaktuar është i përshtatshëm për shumicën e pyetjeve.
Në përgjithësi, kjo është ajo. Dhe pse të gjitha? Sepse gjatësia e lidhjes ishte e gjatë - më e gjatë se të njëjtat 4k.
Duke e vendosur në, për shembull, 8 kb (ose aq sa ka të ngjarë të jetë e mjaftueshme), ne e zgjidhim problemin.
Ashtu shkon.
Burimi: www.habr.com