NetworkStream.DataAvailable нь HTTP хариултын төгсгөлийг заахгүй
Төгсгөлийн нөхцөл болгон NetworkStream.DataAvailable-ийн оронд мессежийн фрэйм ашиглан тасарсан HTTP таталтыг сэргийлээрэй.
NetworkStream.DataAvailable == false гэдэг нь шууд уншихад бэлэн байт байхгүй гэсэн үг. Энэ нь HTTP хариулт дууссан гэсэн үг биш. Тэнд зогсох давталт пакетуудын хоорондын завсарт бүрэн хэвийн SOCKS таталтыг тасалж болно.
SOCKS нь TCP холболтыг тогтоосны дараа ч төгсгөлийн дүрмийг HTTP фрэйм өгдөг:
- Content-Length бүрхүүл нь зарласан агуулгын байтуудын дараа төгсдөг.
- Chunked хариултад түүний төгсгөлийн chunk болон холбогдох trailer хэрэгтэй.
- Холболтоор хязгаарлагдсан хариулт холболттой хамт төгсдөг.
- Зарим статус болон HEAD-д өгөх хариултад бүрхүүл байхгүй.
Хэрэглэгдэх дүрмийг тодорхойлохын тулд статус болон толгойг уншина уу. Зөвхөн хаагдахыг хүлээх нь ерөнхий шийдэл биш, учир нь бүрэн HTTP хариулт холболтыг нээлттэй үлдээж болно. Нэг буферийн багтаамж ч хариултын урттай адил холбоогүй.
HTTP клиентийн фрэймийн хэрэгжүүлэлтийг сонгосон прокси тээврийг дэмжиж байвал ашиглана уу. Тохиромжтой орчин үеийн .NET ажиллагааны орчинд HttpClient-ийн төрөлх SOCKS дэмжлэг-ийг авч үзнэ үү. Түүхий хэрэгжүүлэлт нь хэсэгчилсэн толгой болон бүрхүүл уншилтын хооронд задлан шинжлэх төлвийг хадгалж, амжилттай төгсгөлийг цуцлалт, хугацаа дуусах болон гэнэтийн EOF-оос ялгах ёстой. Хоосон бус унших хүсэлтэд тэг байт уншсан нь урсгал дууссан гэсэн үг; энэ нь яг одоо дараалалд байт байхгүйгээс өөр юм.
Прокси цаг хугацааны завсрыг мэдэгдэхүйц болгож болох ч хоосон хүлээн авах дарааллыг мессежийн төгсгөлийн тэмдэг болгон хувиргахгүй.