Pauzy pri nahrávaní HTTP a Expect: 100-continue
Rozpoznajte výmenu Expect: 100-continue a odlíšte jej krátky rozhodovací bod od nahrávania, ktoré sa zaseklo počas prenosu údajov.
Pripojenie sa otvorí. Hlavičky požiadavky odchádzajú. Zdá sa, že súbor sa nehýbe. Jedno vysvetlenie je, že klient čaká na odpoveď na Expect: 100-continue pred odoslaním tela.
Mechanizmus umožňuje príjemcovi odmietnuť požiadavku na základe jej hlavičiek pred odoslaním potenciálne veľkého nahrávania. Zvyčajná úspešná postupnosť je:
request headers → 100 Continue → request body → final response
100 je informačné: umožňuje klientovi pokračovať, ale neznamená, že súbor bol uložený alebo že operácia aplikácie bola úspešná. Git push vracajúci HTTP 417 je jeden konkrétny prípad nesplneného očakávania.
Zistite, ktorú odpoveď klient dostal
| Pozorovanie | Čo preskúmať |
|---|---|
| 100 Continue | Klient môže pokračovať s telom |
| Konečné odmietnutie pred telom | Operácia bola odmietnutá vo fáze hlavičiek |
| Žiadna očakávaná prechodná odpoveď | Politika čakania klienta a spracovanie na tejto ceste |
curl má samostatné nastavenie čakania expect-continue. Ak toto čakanie libcurl vyprší bez očakávanej odpovede, telo sa odošle aj tak; vypršanie samo o sebe nie je neúspešný celý prenos. Nastavenie je oddelené od času povoleného na celý prenos. Zvýšenie posledného môže nechať tú istú počiatočnú pauzu nevysvetlenú.
Zistite tiež, ktorý HTTP rozhovor prenáša Expect. Pri bežnom CONNECT k cieľu HTTPS sa výmena nahrávania webovej stránky nachádza vnútri TLS; dopredná proxy jednoducho nepreskúmava vnútornú hlavičku očakávania. Cesta zachytávania alebo preposielania v čistom texte je iná.
Odstránenie očakávania môže byť vedomá voľba kompatibility, ale znamená, že klient môže začať odosielať veľké telo skôr, než sa dozvie o včasnom odmietnutí. Porovnajte toto správanie so skutočnou požiadavkou. Neopisujte historické riešenie pre starú proxy ako univerzálny pokyn odstrániť hlavičku z každého nahrávania.