Joskus selaimesi (tai muu sovellus) uskollinen latausmittari vain heittää käsiään ilmalle ja luopuu jäljellä olevan latausaikan näyttämisestä. Miksi se joskus naulaa ennustettu latausaika ja joskus se ei kerro siitä kaikesta yhdessä?
Tämän päivän kysymys- ja vastausistunto tulee meihin SuperUserin hyväksi - Stack Exchangein alaosasto, joka on yhteisöllinen Q & A-sivustojen ryhmittely.
SuperUser-lukija Coldblackice haluaa tietää, miksi hänen selaimessaan ei aina laita likaa:
Jos lataat tiedostoa Web-selaimessa, latauksen eteneminen ei "tiedä" tiedoston kokonaiskokoa tai kuinka pitkälle latauksessa se on - se näyttää vain nopeuden, jolla se lataa, yhteensä "Tuntematon".
Miksi selaimella ei tiedä joidenkin tiedostojen lopullista kokoa? Mistä se saa nämä tiedot ensiksi?
Missä todella?
SuperUser-avustaja Gronostaj tarjoaa seuraavanlaisen näkemyksen:
Jos haluat pyytää asiakirjoja web-palvelimilta, selaimet käyttävät HTTP-protokollaa. Voit tunnistaa tämän nimen osoitekenttään (se voi olla piilotettu nyt, mutta kun napsautat osoitekentän kopioit URL-osoitetta ja liitä se johonkin tekstieditoriksi, näet sen
http: //
alussa). Se on yksinkertainen tekstipohjainen protokolla ja se toimii näin:Ensinnäkin selaimesi muodostaa yhteyden verkkosivuston palvelimelle ja lähettää sen URL-osoitteen, jota se haluaa ladata (www-sivut ovat myös asiakirjoja) ja joitain yksityiskohtia selaimesta (käyttäjä-agentti jne.). Jos haluat esimerkiksi ladata pääsivun SuperUser-sivustossa,
http://superuser.com/
, selaimeni lähettää pyynnön, joka näyttää tältä:GET / HTTP / 1.1 Host: superuser.com Liitäntä: keep-alive Hyväksy: teksti / html, hakemus / xhtml + xml, sovellus / xml; q = 0.9, * / *; q = 0.8 Käyttäjäagentti: Mozilla / Windows NT 6.1; WOW64) Hyväksy-koodaus: gzip, deflate, sdch Accept-Kieli: pl-PL, pl; q = 0.8, en-US; q = 0.6, en; : 1 If-Modified-Since: ti, 09 heinä 2013 07:14:17 GMT
Ensimmäinen rivi määrittää, mitä dokumenttia palvelin palaa. Muita viivoja kutsutaan otsikoiksi; ne näyttävät tästä:
Ylätunnuksen nimi: Yläosassa oleva arvo
Nämä rivit lähettävät lisätietoja, joiden avulla palvelin päättää, mitä tehdä.
Jos kaikki on hyvin, palvelin vastaa lähettämällä pyydetyt asiakirjat. Vastaus alkaa tilaviestillä, jota seuraa joitain otsikoita (asiakirjan yksityiskohtia) ja lopuksi, jos kaikki on hyvin, asiakirjan sisältö. Tämä on se, mitä SuperUser-palvelimen vastaus pyynnöstäsi näyttää:
HTTP / 1.1 200 OK Välimuistin hallinta: julkinen, max-age = 60 Sisältötyyppi: text / html; charset = utf-8 Expires: Tue, 09 Jul 2013 07:27:20 GMT Viimeksi muokattu: Ti, 09 Jul 2013 07:26:20 GMT Vary: * X-Frame-vaihtoehdot: SAMEORIGIN Päivämäärä: ti, 09 heinä 2013 07:26:19 GMT Sisältö-Kesto: 139672 [... snip ...]
Viimeisen rivin jälkeen SuperUserin palvelin sulkee yhteyden.
Ensimmäinen rivi (
HTTP / 1.1 200 OK
) sisältää vastauskoodin, tässä tapauksessa se on200 OK
. Tämä tarkoittaa, että palvelin palauttaa asiakirjan pyydettäessä. Kun palvelin ei onnistu tekemään niin, koodi on jotain muuta: olet todennäköisesti nähnyt404 ei löydetty
, ja403 Ei sallittu
on melko yleistä. Sitten otsikot seuraavat.Kun selain löytää vasemman rivin tyhjän rivin, se tietää, että kaikki kyseisen rivin vieressä on pyydetyn asiakirjan sisältö. Joten tässä tapauksessa
on SuperUserin etusivun koodin ensimmäinen rivi. Jos olin pyytämässä asiakirjaa ladattavaksi, se olisi luultavasti joitain hämmentyviä merkkejä, koska useimmat asiakirjamuodot ovat lukemattomia ilman edeltävää käsittelyä.
Takaisin otsikoihin. Mielenkiintoisin meille on viimeinen,
Content-Length
. Se kertoo selaimelle, kuinka monta tavua dataa se odottaa tyhjän rivin jälkeen, joten pohjimmiltaan se on asiakirjojen koko, joka ilmaistaan tavuina. Tämä otsikko ei ole pakollinen, ja palvelin voi jättää sen pois. Joskus asiakirjan kokoa ei voida ennustaa (esimerkiksi silloin, kun asiakirja on luotu lennossa), joskus laiska ohjelmoijat eivät sisälly siihen (melko yleisiä kuljettajan latauskohteissa), joskus verkkosivustot luo aloittelijoille, jotka eivät tiedä tällaisesta otsakkeesta.Joka tapauksessa syystä johtuen otsikko voi olla kadonnut. Tällöin selaimessa ei tiedetä, kuinka paljon tietoja palvelin aikoo lähettää, ja näin näyttää asiakirjan koontuntematon, odottaa palvelinta sulkemaan yhteyden. Ja tämä on syy tuntemattomille asiakirjakoille.
Onko jokin asia lisättävä selitykseen? Kuulkaa kommentit. Haluatko lukea lisää vastauksia muilta tech-tajuilta Stack Exchange-käyttäjiltä? Katso koko keskusteluketju täältä.