NetworkStream.DataAvailable nuk shënon fundin e një përgjigjeje HTTP
Shmangni shkarkimet HTTP të prera duke përdorur kornizimin e mesazheve në vend të NetworkStream.DataAvailable si kusht fundi.
NetworkStream.DataAvailable == false do të thotë se nuk ka bajt të gatshëm për lexim të menjëhershëm. Nuk do të thotë se një përgjigje HTTP është e plotë. Një cikël që ndalon atje mund të presë një shkarkim SOCKS krejt normal gjatë një hendeku midis paketave.
Pasi SOCKS vendos lidhjen TCP, kornizimi HTTP vazhdon të japë rregullin e përfundimit:
- Një trup me Content-Length përfundon pas bajtëve të përmbajtjes të deklaruar.
- Një përgjigje chunked kërkon chunk-un përfundimtar dhe trailers të zbatueshme.
- Një përgjigje e kufizuar nga lidhja përfundon me lidhjen.
- Disa statuse dhe përgjigje ndaj HEAD nuk kanë trup.
Lexoni statusin dhe titujt për të përcaktuar rregullin e zbatueshëm. Të presësh vetëm mbylljen nuk është zgjidhje e përgjithshme, sepse një përgjigje HTTP e plotë mund ta lërë lidhjen të hapur. Kapaciteti i një buferi është po aq i palidhur me gjatësinë e përgjigjes.
Përdorni zbatimin e kornizimit të klientit HTTP kur ai mbështet transportin e zgjedhur përmes proxy. Në një runtime .NET modern të përputhshëm, konsideroni mbështetjen vendase të SOCKS në HttpClient. Një zbatim i papërpunuar duhet të ruajë gjendjen e analizimit përgjatë titujve të pjesshëm dhe leximeve të trupit, dhe të dallojë përfundimin e suksesshëm nga anulimi, skadimi i kohës dhe EOF i papritur. Në një kërkesë leximi jo bosh, zero bajt të lexuar do të thotë që rrjedha ka mbaruar; kjo ndryshon nga mospasja e bajtëve në radhë në këtë moment.
Proxy mund t'i bëjë të dukshme hendeket kohore, por nuk e kthen një radhë pritjeje bosh në shenjë fundi të mesazhit.