NetworkStream.DataAvailable == false berarti tidak ada byte yang siap dibaca segera. Itu tidak berarti respons HTTP sudah selesai. Perulangan yang berhenti di situ dapat memotong unduhan SOCKS yang sepenuhnya normal selama jeda antarpaket.

Setelah SOCKS membentuk koneksi TCP, pembingkaian HTTP tetap memberikan aturan penyelesaian:

  • Badan dengan Content-Length berakhir setelah byte konten yang dideklarasikan.
  • Respons chunked memerlukan chunk penutup dan trailer yang berlaku.
  • Respons yang dibatasi koneksi berakhir bersama koneksinya.
  • Beberapa status dan respons terhadap HEAD tidak memiliki badan.

Baca status dan header untuk menentukan aturan yang berlaku. Menunggu penutupan saja bukan solusi umum, karena respons HTTP yang lengkap dapat membiarkan koneksi terbuka. Kapasitas satu buffer juga sama tidak terkaitnya dengan panjang respons.

Gunakan implementasi pembingkaian klien HTTP bila mendukung transport proxy yang dipilih. Pada runtime .NET modern yang kompatibel, pertimbangkan dukungan SOCKS bawaan HttpClient. Implementasi mentah harus menyimpan status penguraian di antara header sebagian dan pembacaan badan, serta membedakan penyelesaian yang berhasil dari pembatalan, timeout, dan EOF tak terduga. Untuk permintaan baca yang tidak kosong, nol byte terbaca berarti aliran telah berakhir; ini berbeda dari tidak adanya byte dalam antrean saat ini.

Proxy dapat membuat jeda waktu terlihat, tetapi tidak mengubah antrean penerimaan yang kosong menjadi penanda akhir pesan.

Artikel terkait