Pauze pri HTTP otpremanju i Expect: 100-continue
Prepoznajte razmjenu Expect: 100-continue i razlikujte njenu kratku tačku odluke od otpremanja koje je stalo tokom prijenosa podataka.
Veza se otvara. Zaglavlja zahtjeva odlaze. Čini se da se datoteka ne pomjera. Jedno objašnjenje je da klijent čeka odgovor na Expect: 100-continue prije nego što pošalje svoje tijelo.
Mehanizam omogućava primaocu da odbije zahtjev na osnovu njegovih zaglavlja prije nego što se pošalje potencijalno veliko otpremanje. Uobičajen uspješan slijed je:
request headers → 100 Continue → request body → final response100 je informativan: dozvoljava klijentu da nastavi, ali ne znači da je datoteka sačuvana ili da je operacija aplikacije uspjela. Git push koji vraća HTTP 417 jedan je konkretan slučaj neuspjelog očekivanja.
Utvrdite koji je odgovor klijent primio
| Zapažanje | Značenje koje treba 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 | Politika čekanja klijenta i postupanje na tom putu |
curl nudi posebnu postavku čekanja za expect-continue. Ako to čekanje libcurl-a istekne bez očekivanog odgovora, tijelo se ipak šalje; istek nije automatski neuspio cijeli prijenos. Postavka je odvojena od vremena dozvoljenog za potpuni prijenos. Povećanje potonjeg može ostaviti istu početnu pauzu neobjašnjenom.
Također utvrdite koji HTTP razgovor nosi Expect. Kod običnog CONNECT-a na HTTPS odredište, razmjena otpremanja web lokacije nalazi se unutar TLS-a; prednji proxy ne pregleda jednostavno njegovo unutrašnje zaglavlje očekivanja. Put presretanja ili prijenosa čistim tekstom je drugačiji.
Uklanjanje očekivanja može biti namjeran izbor kompatibilnosti, ali znači da klijent može početi slati veliko tijelo prije nego što sazna za rano odbijanje. Uporedite to ponašanje sa stvarnim zahtjevom. Ne opisujte historijsko zaobilaženje za stari proxy kao univerzalnu uputu za uklanjanje zaglavlja iz svakog otpremanja.