Mengapa Pelayar Web Saya Kadangkala Gagal Menunjukkan Masa Muat Turun yang Masih?
Kadangkala meteran kemajuan muat turun setia pada pelayar anda (atau aplikasi lain) hanya melemparkan tangannya ke udara dan menyerah pada memaparkan masa muat turun yang tinggal. Kenapa kadang-kadang kuku masa unduhan yang diunjurkan dan kadang-kadang gagal melaporkan semuanya bersama-sama?
Sesi Soalan & Jawapan hari ini datang kepada kami dengan ihsan SuperUser-bahagian pembahagian Stack Exchange, kumpulan yang diketuai oleh komuniti laman web Q & A.
Soalan
Pembaca SuperUser Coldblackice ingin tahu mengapa penyemak imbasnya tidak selalu mencuci kotoran:
Kadangkala, apabila memuat turun fail dalam pelayar web, kemajuan muat turun tidak "mengetahui" jumlah saiz fail atau sejauh mana muat turunnya - ia hanya menunjukkan kelajuan di mana ia memuat turun, dengan jumlah keseluruhan sebagai "tidak diketahui".
Mengapa pelayar tidak tahu saiz akhir beberapa fail? Di mana ia mendapat maklumat ini di tempat pertama?
Di mana memang?
Jawapannya
Penyumbang SuperUser Gronostaj menawarkan wawasan berikut:
Untuk meminta dokumen dari pelayan web, pelayar menggunakan protokol HTTP. Anda mungkin tahu nama itu dari bar alamat anda (ia mungkin disembunyikan sekarang, tetapi apabila anda mengklik bar alamat, salin URL dan tampalkannya dalam beberapa editor teks, anda akan melihat
http: //
pada permulaan). Ia adalah protokol berasaskan teks yang mudah dan ia berfungsi seperti ini:Pertama, penyemak imbas anda menyambung ke pelayan tapak web dan menghantar URL dokumen yang ingin dimuat turun (halaman web adalah dokumen juga) dan beberapa butiran mengenai pelayar itu sendiri (Agent-Agent dll). Sebagai contoh, memuat halaman utama di laman SuperUser,
http://superuser.com/
, pelayar saya menghantar permintaan yang kelihatan seperti ini:GET / HTTP / 1.1 Host: superuser.com Sambungan: tetap hidup Terima: teks / html, aplikasi / xhtml + xml, aplikasi / xml; q = 0.9, * / *; q = 0.8 Agen Pengguna: Mozilla / 5.0 ( Qq = 0.8, en-US; q = 0.6, en: q = 0.4 Cookie: [dikeluarkan untuk keselamatan] DNT : 1 Jika Diperbodai-Sejak: Tue, 09 Jul 2013 07:14:17 GMT
Baris pertama menentukan dokumen yang seharusnya dihantar oleh pelayan. Garis lain dipanggil header; mereka kelihatan seperti ini:
Nama header: Nilai header
Barisan ini menghantar maklumat tambahan yang membantu pelayan memutuskan apa yang perlu dilakukan.
Sekiranya semuanya berjalan lancar, pelayan akan bertindak balas dengan menghantar dokumen yang diminta. Tanggapan bermula dengan mesej status, diikuti oleh beberapa tajuk (dengan butiran mengenai dokumen) dan akhirnya, jika semuanya baik, kandungan dokumen. Inilah jawapan server SuperUser untuk permintaan saya seperti:
HTTP / 1.1 200 OK Cache-Control: awam, max-age = 60 Content-Type: text / html; charset = utf-8 Tamat tempoh: Tue, 09 Jul 2013 07:27:20 GMT Terakhir diubah suai: Tue, 09 Jul 2013 07:26:20 GMT Vary: * X-Frame-Options: SAMEORIGIN Tarikh: Tue, 09 Jul 2013 07:26:19 GMT Content-Length: 139672 [... snip ...]
Selepas baris terakhir, pelayan SuperUser menutup sambungan.
Baris pertama (
HTTP / 1.1 200 OK
) mengandungi kod respon, dalam kes ini200 OK
. Ini bermakna pelayan akan memulangkan dokumen, seperti yang diminta. Apabila pelayan tidak berjaya melakukannya, kod itu akan menjadi sesuatu yang lain: anda mungkin telah melihatnya404 tidak dijumpai
, dan403 Terlarang
juga biasa. Kemudian pengetua mengikuti.Apabila penyemak imbas mendapati garisan kosong dalam respons, ia tahu bahawa segala sesuatu yang melepasi garisan itu adalah kandungan dokumen yang diminta. Jadi dalam kes ini
adalah baris pertama kod laman utama SuperUser. Sekiranya saya meminta dokumen untuk dimuat turun, ia mungkin akan menjadi watak-watak yang aneh, kerana kebanyakan format dokumen tidak boleh dibaca tanpa pemprosesan terlebih dahulu.
Kembali ke tajuk. Yang paling menarik untuk kita adalah yang terakhir,
Panjang kandungan
. Ia memberitahu penyemak imbas berapa bait data yang harus dijangkakan selepas baris kosong, jadi pada dasarnya saiz dokumen yang dinyatakan dalam bait. Pengepala ini tidak wajib dan boleh diabaikan oleh pelayan. Kadang-kadang saiz dokumen tidak dapat diramalkan (contohnya apabila dokumen dihasilkan secara lalai), pengatur cara kadang-kadang malas tidak menyertakannya (agak biasa di laman muat turun pemandu), kadang kala laman web dibuat oleh pemula yang tidak tahu daripada tajuk tersebut.Bagaimanapun, apa pun alasannya, tajuk boleh hilang. Dalam hal ini penyemak imbas tidak mengetahui berapa banyak data yang hendak dikirim oleh pelayan, dan dengan itu memaparkan ukuran dokumen sebagai tidak diketahui, menunggu pelayan menutup sambungan. Dan itulah sebabnya untuk saiz dokumen yang tidak diketahui.
Mempunyai sesuatu untuk menambah penjelasannya? Bunyi dalam komen. Ingin membaca lebih banyak jawapan dari pengguna Stack Exchange yang berteknologi tinggi? Lihat thread perbincangan penuh di sini.