Kada preuzeta datoteka počinje HTTP statusnom linijom
Držite uokvirivanje HTTP odgovora izvan preuzete datoteke umjesto da kopirate svaki bajt primljen iz proxy utičnice u izlaznu datoteku.
Ako navodni PDF ili proračunska tablica počinje s HTTP/1.1 200 OK, preuzimač je spremio sirovi odgovor umjesto datoteke. Ovaj shematski odgovor sadrži samo četiri bajta sadržaja:
HTTP/1.1 200 OK
Transfer-Encoding: chunked
4
DATA
0
Datoteka je DATA. Statusna linija, zaglavlja, oznaka veličine i završna struktura pripadaju HTTP-u. Uklanjanje fiksnog broja bajtova nije sigurno jer se duljine zaglavlja razlikuju. Kopiranje svega nakon prvog praznog retka i dalje ostavlja uokvirivanje dijelova, a informativni odgovori mogu prethoditi konačnom odgovoru.
Za normalno preuzimanje zamijenite kopiranje iz sirove utičnice u datoteku sučeljem za tijelo odgovora HTTP klijenta. Konfigurirajte njegov proxy, provjerite konačni status i prenesite tijelo strujanjem u privremeni izlaz. Klijent obrađuje uokvirivanje poruke: tijela ograničena duljinom, po dijelovima (chunked) i ograničena vezom zahtijevaju različito parsiranje.
Kodiranje sadržaja je još jedan sloj. Odlučite trebaju li vam dekodirani bajtovi datoteke ili izričito zatraženi sirovi sadržaj, koristeći dokumentirano ponašanje klijenta. Komprimirani bajtovi nisu automatski oštećenje proxyja.
Ako aplikacija mora zadržati kod na razini utičnice, ona je odgovorna za sva ta pravila parsiranja te za rukovanje čitanjem i pisanjem. Zapisujte samo broj bajtova koje je čitanje stvarno vratilo, a ne kapacitet međuspremnika, i rukujte djelomičnim zapisima. Inače zastario sadržaj međuspremnika može oštetiti čak i ispravno izdvojeno tijelo.
HTTPS zahtijeva više od uklanjanja CONNECT odgovora: nakon uspješnog postavljanja tunela uspostavite TLS prema odredištu i zatim parsirajte unutarnji HTTP odgovor. Šifrirani bajtovi nakon proxy zaglavlja nisu datoteka koja se može preuzeti.
Neuspjeli ili nepotpuni izlaz ostavite pod privremenim imenom. Objavite ga tek nakon što prijenos i provjere datoteke uspiju; datoteka koja nije prazna ne dokazuje potpuno preuzimanje.