Pauze pri HTTP otpremanju i Expect: 100-continue
Prepoznajte razmjenu Expect: 100-continue i razlikujte njezinu kratku točku odluke od otpremanja koje se zaglavilo tijekom prijenosa podataka.
Veza se otvara. Zaglavlja zahtjeva odlaze. Čini se da se datoteka ne pomiče. Jedno objašnjenje je da klijent čeka odgovor na Expect: 100-continue prije slanja tijela.
Mehanizam omogućuje primatelju da odbije zahtjev na osnovu njegovih zaglavlja prije nego što se pošalje potencijalno veliko otpremanje. Uobičajeni uspješni slijed je:
request headers → 100 Continue → request body → final response
100 je informativan: omogućuje klijentu da nastavi, ali ne znači da je datoteka pohranjena ili da je operacija aplikacije uspjela. Git push koji vraća HTTP 417 jedan je konkretan slučaj neispunjenog očekivanja.
Utvrdite koji je odgovor klijent primio
| Zapažanje | Što istražiti |
|---|---|
| 100 Continue | Klijent može nastaviti s tijelom |
| Konačno odbijanje prije tijela | Operacija je odbijena u fazi zaglavlja |
| Nema očekivanog privremenog odgovora | Klijentova politika čekanja i postupanje na tom putu |
curl ima posebnu postavku čekanja expect-continue. Ako to libcurl čekanje istekne bez očekivanog odgovora, tijelo se ipak šalje; istek samo po sebi nije neuspješan cijeli prijenos. Postavka je odvojena od vremena dopuštenog za cijeli prijenos. Povećanje potonjeg može ostaviti istu početnu pauzu neobjašnjenom.
Također utvrdite koji HTTP razgovor nosi Expect. Uz obični CONNECT prema HTTPS odredištu, razmjena otpremanja web-mjesta nalazi se unutar TLS-a; posrednik za prosljeđivanje ne pregledava jednostavno unutarnje zaglavlje očekivanja. Put presretanja ili prosljeđivanja čistim tekstom je drukčiji.
Uklanjanje očekivanja može biti svjestan izbor kompatibilnosti, ali znači da klijent može početi slati veliko tijelo prije nego sazna za rano odbijanje. Usporedite to ponašanje sa stvarnim zahtjevom. Ne opisujte povijesno rješenje za stari posrednik kao univerzalnu uputu za uklanjanje zaglavlja iz svakog otpremanja.