NetworkStream.DataAvailable ບໍ່ໄດ້ໝາຍເຖິງຈຸດສິ້ນສຸດຂອງການຕອບສະໜອງ HTTP
ປ້ອງກັນການດາວໂຫລດ HTTP ທີ່ຖືກຕັດຂາດ ໂດຍໃຊ້ການຈັດກອບຂໍ້ຄວາມ ແທນ NetworkStream.DataAvailable ເປັນເງື່ອນໄຂສິ້ນສຸດ.
NetworkStream.DataAvailable == false ໝາຍຄວາມວ່າບໍ່ມີໄບທີ່ພ້ອມຈະອ່ານທັນທີ. ມັນບໍ່ໄດ້ໝາຍຄວາມວ່າການຕອບສະໜອງ HTTP ສຳເລັດແລ້ວ. ວົງຈອນທີ່ຢຸດຢູ່ຈຸດນັ້ນອາດຕັດການດາວໂຫລດ SOCKS ປົກກະຕິຢ່າງສົມບູນ ໃນຊ່ວງຫວ່າງລະຫວ່າງແພັກເກັດ.
ຫຼັງຈາກ SOCKS ສ້າງການເຊື່ອມຕໍ່ TCP ແລ້ວ ການຈັດກອບ HTTP ຍັງໃຫ້ກົດເກນການສຳເລັດ:
- ຕົວ Content-Length ສິ້ນສຸດຫຼັງໄບຂອງເນື້ອຫາທີ່ປະກາດໄວ້.
- ການຕອບສະໜອງແບບ chunked ຕ້ອງການ chunk ສຸດທ້າຍ ແລະ trailer ທີ່ກ່ຽວຂ້ອງ.
- ການຕອບສະໜອງທີ່ກຳນົດດ້ວຍການເຊື່ອມຕໍ່ ຈະສິ້ນສຸດພ້ອມກັບການເຊື່ອມຕໍ່.
- ສະຖານະບາງຢ່າງ ແລະ ການຕອບສະໜອງຕໍ່ HEAD ບໍ່ມີຕົວ.
ອ່ານສະຖານະ ແລະ ຫົວຂໍ້ ເພື່ອກຳນົດກົດເກນທີ່ໃຊ້. ການລໍຖ້າພຽງແຕ່ການປິດ ບໍ່ແມ່ນວິທີແກ້ໄຂທົ່ວໄປ ເພາະການຕອບສະໜອງ HTTP ທີ່ສົມບູນອາດເຮັດໃຫ້ການເຊື່ອມຕໍ່ເປີດຢູ່. ຄວາມຈຸຂອງ buffer ໜຶ່ງກໍບໍ່ກ່ຽວຂ້ອງກັບຄວາມຍາວຂອງການຕອບສະໜອງ.
ໃຊ້ການຈັດກອບຂອງ HTTP client ເມື່ອມັນຮອງຮັບການຂົນສົ່ງຜ່ານ proxy ທີ່ເລືອກ. ເທິງ .NET runtime ທີ່ທັນສະໄໝແລະ ເຂົ້າກັນໄດ້ ໃຫ້ພິຈາລະນາ ການຮອງຮັບ SOCKS ພື້ນເມືອງຂອງ HttpClient. ການຈັດການແບບດິບຕ້ອງຮັກສາສະຖານະການແຍກລະຫວ່າງຫົວຂໍ້ບາງສ່ວນ ແລະ ການອ່ານຕົວ, ແລະ ແຍກການສຳເລັດອອກຈາກການຍົກເລີກ, ການໝົດເວລາ ແລະ EOF ທີ່ບໍ່ໄດ້ຄາດຫວັງ. ສຳລັບຄຳຂໍອ່ານທີ່ບໍ່ຫວ່າງເປົ່າ ການອ່ານໄບເປັນສູນ ໝາຍຄວາມວ່າ stream ສິ້ນສຸດແລ້ວ; ນີ້ແຕກຕ່າງຈາກການບໍ່ມີໄບໃນຄິວໃນຂະນະນີ້.
proxy ສາມາດເຮັດໃຫ້ຊ່ອງຫວ່າງເວລາເຫັນໄດ້ຊັດ ແຕ່ມັນບໍ່ໄດ້ປ່ຽນຄິວຮັບທີ່ຫວ່າງເປົ່າໃຫ້ເປັນເຄື່ອງໝາຍຈຸດສິ້ນສຸດຂອງຂໍ້ຄວາມ.