NetworkStream.DataAvailable ne označava kraj HTTP odgovora
Spriječite skraćena HTTP preuzimanja korištenjem uokvirivanja poruka umjesto NetworkStream.DataAvailable kao uvjeta završetka.
NetworkStream.DataAvailable == false znači da nema bajtova spremnih za neposredno čitanje. To ne znači da je HTTP odgovor dovršen. Petlja koja se tu zaustavi može odrezati posve normalno SOCKS preuzimanje tijekom stanke između paketa.
Nakon što SOCKS uspostavi TCP vezu, HTTP uokvirivanje i dalje daje pravilo dovršetka:
- Tijelo s Content-Length završava nakon objavljenih bajtova sadržaja.
- Chunked odgovor treba završni chunk i primjenjive trailere.
- Odgovor omeđen vezom završava zajedno s vezom.
- Neki statusi i odgovori na HEAD nemaju tijelo.
Pročitajte status i zaglavlja kako biste odredili primjenjivo pravilo. Čekanje samo na zatvaranje nije općenito rješenje jer potpun HTTP odgovor može ostaviti vezu otvorenom. Kapacitet jednog međuspremnika jednako je nepovezan s duljinom odgovora.
Koristite implementaciju uokvirivanja HTTP klijenta kada podržava odabrani proxy prijenos. Na kompatibilnom modernom .NET runtimeu razmotrite ugrađenu SOCKS podršku HttpClienta. Sirova implementacija mora čuvati stanje raščlambe kroz djelomična zaglavlja i čitanja tijela te razlikovati uspješan završetak od otkazivanja, isteka vremena i neočekivanog EOF-a. Za zahtjev čitanja koji nije prazan, nula pročitanih bajtova znači da je tok završio; to se razlikuje od toga da trenutačno nema bajtova u redu.
Proxy može učiniti vremenske stanke uočljivima, ali ne pretvara prazan red za primanje u oznaku kraja poruke.