NetworkStream.DataAvailable(e)k ez du HTTP erantzun baten amaiera markatzen
Saihestu HTTP deskarga moztuak, erabiliz mezu-enkoadroa NetworkStream.DataAvailable amaiera-baldintza gisa erabili beharrean.
NetworkStream.DataAvailable == false esan nahi du ez dagoela berehala irakurtzeko prest dagoen byte-rik. Ez du esan nahi HTTP erantzun bat osatuta dagoenik. Han geldituz gero, begizta batek SOCKS deskarga guztiz arrunta moz dezake paketeen arteko tartean.
SOCKS(e)k TCP konexioa ezarri ondoren, HTTP enkoadroak ematen du oraindik amaiera-araua:
- Content-Length duen gorputza adierazitako eduki-byteen ondoren amaitzen da.
- Chunked erantzunak amaierako chunk-a eta dagozkion trailer-ak behar ditu.
- Konexioak mugatutako erantzuna konexioarekin batera amaitzen da.
- Zenbait egoerak eta HEAD-i emandako erantzunek ez dute gorputzik.
Irakurri egoera eta goiburuak aplikagarria den araua zehazteko. Soilik itxieraren zain egotea ez da konponbide orokorra, HTTP erantzun oso batek konexioa irekita utz baitezake. Buffer baten edukierak ez du erantzunaren luzerarekiko zerikusirik ere.
Erabili HTTP bezeroaren enkoadroaren inplementazioa hautatutako proxy garraioa onartzen duenean. .NET runtime moderno bateragarri batean, har ezazu kontuan HttpClient-en SOCKS onarpen natiboa. Inplementazio gordin batek analisi-egoera mantendu behar du goiburu eta gorputz irakurketa partzialen zehar, eta amaiera arrakastatsua bereizi behar du ezeztatzetik, denbora-mugatik eta ustekabeko EOFtik. Irakurketa-eskaera hutsik ez denean, zero byte irakurtzeak fluxua amaitu dela esan nahi du; hori desberdina da une honetan ilaran byte-rik ez egotea.
Proxyak denbora-tarteak nabariarazi ditzake, baina ez du harrera-ilara hutsa mezu amaierako markatzaile bihurtzen.