Sebuah report.xlsx hipotetis berukuran 8 KB dan terbuka sebagai halaman masuk. Program berhasil menyimpan berkas, tetapi tidak pernah memperoleh spreadsheet yang dimaksud. Nama berkas dipilih secara lokal; itu bukan bukti tentang apa yang tiba.

Jadikan penerimaan langkah terpisah sebelum menerbitkan unduhan sementara:

  1. Wajibkan transfer berhasil dan status respons yang diharapkan. Pertahankan galat alih-alih menganggap byte yang ditulis sebelumnya sudah lengkap.
  2. Bandingkan isi dengan jenis artefak yang diharapkan. Halaman masuk atau penyaring dapat mengembalikan 200. Content-Type bisa salah, dan awalan HTML dalam spreadsheet adalah peringatan yang perlu diselidiki. Berkas yang diawali baris status HTTP justru menunjuk pada pembingkaian respons mentah.
  3. Validasi seluruh byte tersimpan terhadap checksum atau tanda tangan tepercaya bila tersedia. Aplikasi sebaiknya menerbitkan atau memakai berkas akhir hanya setelah pemeriksaan yang diwajibkan lolos.

Menghitung hash tanpa nilai yang diharapkan hanya mengidentifikasi byte yang Anda terima. Checksum tanpa tanda tangan yang diambil melalui jalur tidak tepercaya yang sama dapat berbagi kelemahan artefak; gunakan ekspektasi tepercaya yang independen.

Hati-hati juga dengan perbandingan ukuran. Klien HTTP dapat mendekode pengodean isi saat membaca, sehingga panjang berkas hasilnya bisa berbeda secara sah dari header yang menjelaskan pesan terkode. Bandingkan ekspektasi penerbit dengan representasi yang benar-benar tersimpan.

Jika upaya gagal, simpan keluaran sementara hanya untuk melanjutkan secara sengaja atau buang. Membiarkan byte tidak lengkap di jalur akhir memaksa program berikutnya menebak apakah byte itu dapat digunakan.

Artikel terkait