If-Koubou

Mengapa Peramban Web Saya Terkadang Gagal Menampilkan Waktu Pengunduhan yang Tersisa?

Mengapa Peramban Web Saya Terkadang Gagal Menampilkan Waktu Pengunduhan yang Tersisa? (Bagaimana caranya)

Terkadang pengukur kemajuan pengunduhan yang setia di browser Anda (atau aplikasi lain) hanya melemparkan tangannya ke udara dan berhenti menampilkan waktu unduh yang tersisa. Mengapa terkadang memaku waktu unduh yang diproyeksikan dan terkadang gagal untuk melaporkannya bersama-sama?

Sesi Tanya & Jawab hari ini hadir untuk memberi kami hak milik SuperUser-sub divisi Stack Exchange, pengelompokan situs web Q & A berbasis komunitas.

Pertanyaan

Pembaca SuperUser, Coldblackice ingin tahu mengapa perambannya tidak selalu menyumbat kotorannya:

Terkadang, saat mengunduh file di browser web, proses unduhan tidak "tahu" ukuran total file, atau seberapa jauh dalam unduhan itu - itu hanya menunjukkan kecepatan pengunduhan, dengan total sebagai "Tidak dikenal".

Mengapa peramban tidak mengetahui ukuran akhir dari beberapa file? Dari mana mendapatkan informasi ini di tempat pertama?

Di mana sebenarnya?

Jawaban

Kontributor SuperUser, Gronostaj, menawarkan wawasan berikut:

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 mengeklik bilah alamat, salin URL dan tempelkan di beberapa editor teks, Anda akan melihathttp: // pada awalnya). Ini adalah protokol berbasis teks sederhana dan berfungsi seperti ini:

Pertama, browser Anda terhubung ke server situs web dan mengirim URL dokumen yang ingin diunduh (halaman web adalah dokumen juga) dan beberapa rincian tentang browser itu sendiri (User-Agent, dll.). Misalnya, untuk memuat halaman utama di situs SuperUser,http://superuser.com/, browser saya mengirimkan permintaan yang terlihat seperti ini:

GET / HTTP / 1.1 Host: superuser.com Koneksi: keep-alive Terima: teks / html, aplikasi / xhtml + xml, aplikasi / xml; q = 0.9, * / *; q = 0.8 User-Agent: Mozilla / 5.0 ( Windows NT 6.1; WOW64) Accept-Encoding: gzip, deflate, sdch Accept-Language: pl-PL, pl; q = 0.8, en-US; q = 0.6, en; q = 0.4 Cookie: [dihapus untuk keamanan] DNT : 1 If-Modified-Since: Tue, 09 Jul 2013 07:14:17 GMT 

Baris pertama menentukan dokumen mana yang harus dikembalikan oleh server. Garis lain disebut sebagai header; mereka terlihat seperti ini:

Nama kepala: Nilai kepala 

Baris-baris ini mengirim informasi tambahan yang membantu server memutuskan apa yang harus dilakukan.

Jika semuanya baik-baik, server akan merespon dengan mengirim dokumen yang diminta. Tanggapan dimulai dengan pesan status, diikuti oleh beberapa header (dengan rincian tentang dokumen) dan akhirnya, jika semuanya baik-baik, konten dokumen. Ini adalah jawaban server SuperUser untuk permintaan saya seperti:

HTTP / 1.1 200 OK Cache-Control: publik, usia maks = 60 Content-Type: text / html; charset = utf-8 Kedaluwarsa: Selasa, 09 Juli 2013 07:27:20 GMT Terakhir-Dimodifikasi: Selasa, 09 Juli 2013 07:26:20 GMT Vary: * X-Frame-Options: SAMEORIGIN Tanggal: Selasa, 09 Juli 2013 07:26:19 GMT Konten-Panjang: 139672 [... snip ...] 

Setelah baris terakhir, server SuperUser menutup koneksi.

Baris pertama (HTTP / 1.1 200 OK) berisi kode respons, dalam hal ini200 OK. Ini berarti server akan mengembalikan dokumen, seperti yang diminta. Ketika server tidak berhasil melakukannya, kode akan menjadi sesuatu yang lain: Anda mungkin pernah melihatnya404 tidak ditemukan, dan403 Forbidden cukup umum juga. Lalu tajuknya menyusul.

Ketika peramban menemukan baris kosong dalam respons, ia tahu bahwa semua yang melewati garis itu adalah isi dari dokumen yang diminta. Jadi dalam hal ini adalah baris pertama dari kode homepage SuperUser. Jika saya meminta dokumen untuk diunduh, mungkin itu adalah beberapa karakter nonsens, karena sebagian besar format dokumen tidak dapat dibaca tanpa pemrosesan sebelumnya.

Kembali ke header. Yang paling menarik bagi kami adalah yang terakhir,Panjang Konten. Ini memberitahu browser berapa banyak byte data yang seharusnya diharapkan setelah baris kosong, jadi pada dasarnya ukuran dokumen dinyatakan dalam byte. Tajuk ini tidak wajib dan dapat diabaikan oleh server. Kadang-kadang ukuran dokumen tidak dapat diprediksi (misalnya ketika dokumen dibuat dengan cepat), terkadang pemrogram yang malas tidak memasukkannya (sangat umum di situs pengunduhan pengandar), terkadang situs web dibuat oleh pemula yang tidak tahu seperti header.

Bagaimanapun, apa pun alasannya, tajuk itu bisa hilang. Dalam hal ini browser tidak tahu berapa banyak data yang akan dikirim oleh server, dan dengan demikian menampilkan ukuran dokumen sebagaitidak diketahui, menunggu server untuk menutup koneksi. Dan itulah alasan untuk ukuran dokumen yang tidak diketahui.

Memiliki sesuatu untuk ditambahkan ke penjelasan? Bicaralah di komentar. Ingin membaca lebih banyak jawaban dari pengguna Stack Exchange yang paham teknologi lainnya? Lihat diskusi lengkap di sini.