Jika PDF atau lembar kerja yang diduga dimulai dengan HTTP/1.1 200 OK, pengunduh menyimpan respons mentah alih-alih berkasnya. Respons skematis ini hanya berisi empat byte konten:

HTTP/1.1 200 OK
Transfer-Encoding: chunked

4
DATA
0

Berkasnya adalah DATA. Baris status, header, penanda ukuran, dan struktur pengakhir termasuk milik HTTP. Menghapus sejumlah byte tetap tidak aman karena panjang header bervariasi. Menyalin semua yang setelah baris kosong pertama masih menyisakan pembingkaian potongan, dan balasan informasional dapat mendahului balasan akhir.

Untuk unduhan normal, ganti penyalinan dari soket mentah ke berkas dengan antarmuka badan respons klien HTTP. Konfigurasikan proksinya, validasi status akhir, dan alirkan badan ke keluaran sementara. Klien menangani pembingkaian pesan: badan yang dibatasi panjang, potongan, dan koneksi memerlukan penguraian berbeda.

Pengodean konten adalah lapisan lain. Putuskan apakah Anda memerlukan byte berkas yang didekode atau konten mentah yang diminta secara eksplisit, berdasarkan perilaku klien yang terdokumentasi. Byte terkompresi bukan otomatis kerusakan proksi.

Jika aplikasi harus mempertahankan kode tingkat soket, ia memiliki semua aturan penguraian tersebut serta penanganan baca dan tulis. Tuliskan hanya jumlah byte yang benar-benar dikembalikan oleh pembacaan, bukan kapasitas buffer, dan tangani penulisan parsial. Jika tidak, isi buffer yang kedaluwarsa dapat merusak bahkan badan yang diekstrak dengan benar.

HTTPS memerlukan lebih dari sekadar mengupas respons CONNECT: setelah penyiapan terowongan berhasil, bangun TLS tujuan lalu uraikan respons HTTP bagian dalam. Byte terenkripsi setelah header proksi bukan berkas yang dapat diunduh.

Biarkan keluaran yang gagal atau tidak lengkap dengan nama sementara. Terbitkan hanya setelah transfer dan pemeriksaan berkas berhasil; berkas yang tidak kosong tidak membuktikan unduhan lengkap.

Artikel terkait