Današnja pitanja i odgovori nam se javljaju zahvaljujući SuperUseru - podjele Stack Exchange-a, zajednice-driven grupiranja Q & A web stranica.
Pitanje
Čitač SuperUser Coldblackice želi znati zašto njegov preglednik ne zna uvijek prljavštinu:
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?
Gdje doista?
Odgovori
Gronostaj koji daje doprinos SuperUseru nudi sljedeće uvide:
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://
na početku). To je jednostavan protokol koji se temelji na tekstu i funkcionira ovako:
Prvo se vaš preglednik povezuje s poslužiteljem web stranice i šalje URL dokumenta koji želi preuzeti (web stranice su i dokumenti) i neke pojedinosti o samom pregledniku (User-Agent itd.). Na primjer, za učitavanje glavne stranice na web mjestu SuperUser,
https://superuser.com/
moj preglednik šalje zahtjev koji izgleda ovako:
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
Prva linija određuje koji će se dokument poslužitelja vratiti. Druge linije nazivaju se zaglavlja; oni izgledaju ovako:
Header name: Header value
Ti retci šalju dodatne informacije koje pomažu poslužitelju odlučiti što učiniti.
Ako je sve u redu, poslužitelj će odgovoriti slanjem zatraženog dokumenta. Odgovor započinje s porukom o statusu, nakon čega slijedi nekoliko zaglavlja (s pojedinostima o dokumentu) i konačno, ako je sve u redu, sadržaj dokumenta. Ovako izgleda odgovor SuperUser poslužitelja za moj zahtjev:
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…]
Nakon posljednjeg retka, poslužitelj SuperUser-a zatvara vezu.
Prva crta (
HTTP/1.1 200 OK
) sadrži kod odgovora, u ovom slučaju to je
200 OK
To znači da će poslužitelj vratiti dokument, kako je zatraženo. Kada poslužitelj to ne uspije, kod će biti nešto drugo: vjerojatno ste ga vidjeli
404 Not Found
i
403 Forbidden
vrlo je čest. Zatim slijede zaglavlja.
Kada preglednik pronađe praznu liniju u odgovoru, zna da je sve prošlo taj redak sadržaj dokumenta koji je zatražio. Dakle, u ovom slučaju
je prva linija kodova SuperUserove stranice. Ako bih zatražio dokument za preuzimanje, vjerojatno bi to bio neki nejasni znakovi jer većina formata dokumenata nije moguće čitati bez prethodne obrade.
Natrag na zaglavlja. Najzanimljiviji je za nas posljednji,
Content-Length
Informira preglednika koliko bajtova podataka treba očekivati nakon praznog retka, pa je u osnovi veličina dokumenta izražena u bajtovima. Ovo zaglavlje nije obavezno i poslužitelj može propustiti. Ponekad se veličina dokumenta ne može predvidjeti (primjerice, kada se dokument generira u letu), ponekad ga lijeni programeri ne uključuju (prilično uobičajena mjesta za preuzimanje upravljačkih programa), ponekad web stranice stvaraju novorođenčad koja ne zna takvog zaglavlja.
U svakom slučaju, bez obzira na razlog, zaglavlje može nestati. U tom slučaju preglednik ne zna koliko će podataka poslužitelj poslati i tako prikazuje veličinu dokumenta kaonepoznata, čekajući da poslužitelj zatvori vezu. I to je razlog za nepoznate veličine dokumenata.
Imate li nešto za objašnjenje? Zvuči u komentarima. Želite li pročitati više odgovora od drugih tehnoloških korisnika Stack Exchangea? Pogledajte ovdje cijelu raspravu.