Sesi Tanya & Jawab Hari ini hadir untuk memberi kami SuperUser - subdivisi Stack Exchange, pengelompokan situs web Q & A berbasis komunitas.
Pertanyaan
Pembaca SuperUser, Coldblackice ingin tahu mengapa perambannya tidak selalu menyumbat kotoran:
Occasionally, when downloading a file in a web browser, the download progress doesn’t “know” the total size of the file, or how far along in the download it is - it just shows the speed at which it’s downloading, with a total as “Unknown”.
Why wouldn’t the browser know the final size of some files? Where does it get this information in the first place?
Di mana sebenarnya?
Jawaban
Kontributor SuperUser, Gronostaj, menawarkan wawasan berikut:
To request documents from web servers, browsers use the HTTP protocol. You may know that name from your address bar (it may be hidden now, but when you click the address bar, copy the URL and paste it in some text editor, you’ll see
https://
pada awalnya). Ini adalah protokol berbasis teks sederhana dan berfungsi seperti ini:
Pertama, peramban Anda terhubung ke server situs web dan mengirim URL dokumen yang ingin diunduh (laman web adalah dokumen juga) dan beberapa detail tentang peramban itu sendiri (Agen-Pengguna, dll.). Misalnya, untuk memuat halaman utama di situs SuperUser,
https://superuser.com/
browser saya mengirimkan permintaan yang terlihat seperti ini:
GET / HTTP/1.1 Host: superuser.com Connection: keep-alive Accept: text/html,application/xhtml+xml,application/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: [removed for security] 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:
Header name: Header value
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 tajuk (dengan detail 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: public, max-age=60 Content-Type: text/html; charset=utf-8 Expires: Tue, 09 Jul 2013 07:27:20 GMT Last-Modified: Tue, 09 Jul 2013 07:26:20 GMT Vary: * X-Frame-Options: SAMEORIGIN Date: Tue, 09 Jul 2013 07:26:19 GMT Content-Length: 139672 […snip…]
Setelah baris terakhir, server SuperUser menutup koneksi.
Baris pertama (
HTTP/1.1 200 OK
) berisi kode respons, dalam hal ini adalah
200 OK
. Ini berarti server akan mengembalikan dokumen, seperti yang diminta. Ketika server tidak berhasil melakukannya, kode akan menjadi sesuatu yang lain: Anda mungkin pernah melihatnya
404 Not Found
dan
403 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 beranda 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,
Content-Length
. Ini memberi tahu peramban berapa banyak bita data yang 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 (cukup umum di situs pengunduhan driver), terkadang situs 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 dikirimkan 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.