Pertanyaan ini sudah ada jawabannya di sini:
Kadang-kadang, saat mengunduh file di browser web, progres pengunduhan tidak "tahu" ukuran total file, atau seberapa jauh dalam pengunduhannya - ini hanya menunjukkan kecepatan pengunduhannya, dengan total sebagai "Tidak Dikenal".
Mengapa peramban tidak mengetahui ukuran akhir beberapa file? Di mana ia mendapatkan informasi ini?
Jawaban:
Untuk meminta dokumen dari server web, browser menggunakan protokol HTTP. Anda mungkin tahu nama itu dari bilah alamat Anda (mungkin disembunyikan sekarang, tetapi ketika Anda mengklik bilah alamat, salin URL dan tempel di beberapa editor teks, Anda akan melihat
http://
di awal). HTTP adalah protokol berbasis teks yang sederhana. Ini berfungsi seperti ini:Pertama, browser Anda terhubung ke server situs web dan mengirimkan URL dokumen yang ingin diunduh (halaman web juga dokumen) dan beberapa detail tentang browser itu sendiri ( User-Agent dll). Misalnya, untuk memuat halaman utama di situs SuperUser
http://superuser.com/
,, browser saya mengirim permintaan yang terlihat seperti ini:Baris pertama menentukan dokumen mana yang harus dikembalikan oleh server. Baris lain disebut header; mereka terlihat seperti ini:
Baris-baris ini mengirimkan informasi tambahan yang membantu server memutuskan apa yang harus dilakukan.
Jika semuanya baik-baik saja, server akan merespons dengan mengirimkan dokumen yang diminta. Respons dimulai dengan pesan status, diikuti oleh beberapa tajuk (dengan perincian tentang dokumen) dan akhirnya, jika semuanya baik-baik, konten dokumen. Seperti inilah balasan server SuperUser untuk permintaan saya:
Setelah baris terakhir, server SuperUser menutup koneksi.
Baris pertama (
HTTP/1.1 200 OK
) berisi kode respons , dalam hal ini200 OK
. Ini berarti bahwa server telah memutuskan dapat mengembalikan dokumen, seperti yang diminta, dan berjanji bahwa konten yang mengikuti akan menjadi dokumen seperti itu. Jika ini bukan masalahnya, kode akan menjadi sesuatu yang lain, dan itu akan memberikan beberapa indikasi alasan server tidak hanya mengembalikan dokumen sebagai tanggapan: misalnya, jika tidak dapat menemukan dokumen yang diminta, itu seharusnya mengembalikan404 Not Found
, dan jika Anda tidak diizinkan untuk mengakses konten yang dipermasalahkan itu seharusnya dikembalikan403 Forbidden
.Setelah baris status pertama ini, header respons akan mengikuti; mereka memberikan lebih banyak informasi tentang konten yang dikembalikan, seperti itu
Content-type
.Berikutnya adalah baris kosong. Ini menandakan fakta bahwa tidak ada lagi header respons yang akan mengikuti. Segala sesuatu yang melewati garis itu adalah isi dokumen yang diminta. Jadi pada contoh di atas,
<!DOCTYPE html>
adalah baris pertama halaman beranda SuperUser (dokumen HTML). Jika saya meminta dokumen untuk diunduh, mungkin ada beberapa karakter omong kosong, karena sebagian besar format dokumen tidak dapat dibaca tanpa pemrosesan sebelumnya.Kembali ke tajuk. Yang paling menarik bagi kami adalah yang terakhir
Content-Length
,. Ini memberitahu browser berapa banyak byte data yang diharapkan setelah baris kosong, jadi pada dasarnya ukuran dokumen dinyatakan dalam byte. Header ini tidak wajib dan mungkin dihilangkan oleh server. Terkadang ukuran dokumen tidak dapat diprediksi (misalnya saat dokumen dihasilkan dengan cepat), terkadang programmer malas tidak memasukkannya (cukup umum di situs pengunduhan driver), terkadang situs web dibuat oleh pemula yang tidak tahu dari header seperti itu.Pokoknya, apa pun alasannya, tajuknya bisa hilang. Dalam hal ini browser tidak tahu berapa banyak data yang akan dikirim oleh server, dan karenanya menampilkan ukuran dokumen sebagai tidak diketahui , menunggu server untuk menutup koneksi. Dan itulah alasan ukuran dokumen tidak diketahui.
sumber
Content-Length
Header HTTP bersifat opsional dalam beberapa kasus, dan karena itu mungkin tidak dikirimkan bersama file; akhir file akan diberi sinyal ketika soket ditutup.sumber
Content-Length
header digunakan atau dokumen tersebut ditransferTransfer-Encoding: chunked
. Yang terakhir memungkinkan untuk secara dinamis menghasilkan konten dan mengirimkannya sedikit demi sedikit ketika dihasilkan dan dapat memberi sinyal pada akhir dokumen.Ketika konten (misalnya
.pdf
dokumen atau lembar Excel) dibuat dengan cepat, ukurannya tidak dapat diketahui sebelumnya. Dalam hal ini server tidak dapat mengirimi Anda ukuran unduhan sebelumnya dan browser tidak dapat menampilkan ukuran total.sumber
.pdf
file dengan cepat. Selama data tidak ditulis secara kompeten, Anda tidak tahu ukurannya tetapi Anda sudah dapat mengirim ata ke browser. Saya sudah melakukan ini di Jawa dan mengirim file Excel ke browser yang dibuat dengan cepat. Dari sisi browser itu tampak seperti unduhan tetapi dari sisi server itu adalah streaming. Jadi dimungkinkan untuk melakukan streaming.pdf
file bahkan jika Anda tidak dapat membayangkan ini. Dari peramban itu terlihat seperti unduhan tanpa panjang yang diketahui..pdf
file atau lembar Excel!