Kai atsisiųstas failas prasideda HTTP būsenos eilute
Neleiskite HTTP atsakymo kadravimui patekti į atsisiųstą failą, o ne kopijuokite kiekvieną baitą, gautą iš tarpinio serverio lizdo, į išvesties failą.
Jei tariamas PDF ar skaičiuoklė prasideda HTTP/1.1 200 OK, atsisiuntėjas išsaugojo neapdorotą atsakymą, o ne failą. Šiame scheminiame atsakyme yra tik keturi baitai turinio:
HTTP/1.1 200 OK
Transfer-Encoding: chunked
4
DATA
0
Failas yra DATA. Būsenos eilutė, antraštės, dydžio žymė ir baigiamoji struktūra priklauso HTTP. Šalinti fiksuotą baitų skaičių nesaugu, nes antraščių ilgiai skiriasi. Nukopijavus viską po pirmos tuščios eilutės vis tiek lieka gabalų kadravimas, o informaciniai atsakymai gali eiti prieš galutinį atsakymą.
Įprastam atsisiuntimui pakeiskite kopijavimą iš neapdoroto lizdo į failą HTTP kliento atsakymo turinio sąsaja. Nustatykite jo tarpinį serverį, patikrinkite galutinę būseną ir transliuokite turinį į laikiną išvestį. Klientas tvarko pranešimo kadravimą: ilgiu apibrėžti, gabalais (chunked) ir ryšiu apibrėžti turiniai reikalauja skirtingo analizavimo.
Turinio kodavimas yra dar vienas sluoksnis. Nuspręskite, ar jums reikia iškoduotų failo baitų, ar aiškiai paprašyto neapdoroto turinio, remdamiesi dokumentuotu kliento elgesiu. Suspausti baitai nėra automatiškai tarpinio serverio sugadinimas.
Jei programa turi išlaikyti lizdo lygio kodą, ji pati atsako už visas tas analizavimo taisykles bei skaitymo ir rašymo tvarkymą. Rašykite tik tiek baitų, kiek skaitymas iš tikrųjų grąžino, o ne buferio talpą, ir tvarkykite dalinį rašymą. Priešingu atveju pasenęs buferio turinys gali sugadinti net teisingai išgautą turinį.
HTTPS reikalauja daugiau nei CONNECT atsakymo nuėmimo: sėkmingai nustačius tunelį, reikia sukurti paskirties TLS ir tada analizuoti vidinį HTTP atsakymą. Užšifruoti baitai po tarpinio serverio antraščių nėra atsisiunčiamas failas.
Nepavykusį ar nebaigtą rezultatą palikite laikinu vardu. Paskelbkite jį tik po to, kai perdavimas ir failo patikros pavyks; netuščias failas neįrodo, kad atsisiuntimas baigtas.