NetworkStream.DataAvailable ei märgi HTTP-vastuse lõppu
Vältige kärbitud HTTP-allalaadimisi, kasutades lõputingimusena sõnumiraamistust, mitte NetworkStream.DataAvailableit.
NetworkStream.DataAvailable == false tähendab, et ühtegi baiti ei ole kohe lugemiseks valmis. See ei tähenda, et HTTP-vastus on lõppenud. Seal peatuv tsükkel võib pakettidevahelise pausi ajal kärpida täiesti tavalise SOCKS-allalaadimise.
Pärast seda, kui SOCKS on TCP-ühenduse loonud, annab lõpetamise reegli endiselt HTTP raamistus:
- Content-Length'iga keha lõpeb deklareeritud sisubaitide järel.
- Chunked-vastus vajab lõplikku chunk'i ja asjakohaseid trailereid.
- Ühendusega piiritletud vastus lõpeb koos ühendusega.
- Mõnel olekukoodil ja HEAD-vastusel ei ole keha.
Lugege olekut ja päiseid, et teha kindlaks kohaldatav reegel. Ainult sulgemise ootamine ei ole üldine lahendus, sest täielik HTTP-vastus võib ühenduse avatuks jätta. Ühe puhvri maht on sama vähe seotud vastuse pikkusega.
Kasutage HTTP-kliendi raamistuse rakendust, kui see toetab valitud puhverserveri transporti. Ühilduvas kaasaegses .NETi käituskeskkonnas kaaluge HttpClienti loomulikku SOCKS-tuge. Toores rakendus peab hoidma parsimisolekut osaliste päiste ja keha lugemiste vahel ning eristama edukat lõpetamist tühistamisest, ajalõppest ja ootamatust EOF-ist. Mitte-tühja lugemispäringu korral tähendab null loetud baiti, et voog on lõppenud; see erineb sellest, et hetkel ei ole järjekorras ühtegi baiti.
Puhverserver võib ajapause märgatavaks teha, kuid see ei muuda tühja vastuvõtujärjekorda sõnumi lõpu markeriks.