Dažreiz uzticamais lejupielādes progresa skaitītājs jūsu pārlūkprogrammā (vai citā lietojumprogrammā) vienkārši izstaro rokas gaisā un atsakās par atlikušās lejupielādes laiku. Kāpēc tas reizēm piesauc plānoto lejupielādes laiku un reizēm to nesniedz kopā?
Šodienas jautājumu un atbilžu sesija mums priecājas par SuperUser - Stack Exchange dalību, kas ir kopienas vadīta Q & A tīmekļa vietņu grupa.
SuperUser lasītājs Coldblackice vēlas uzzināt, kāpēc viņa pārlūks ne vienmēr padara netīrumus:
Reizēm, lejupielādējot failu tīmekļa pārlūkprogrammā, lejupielādes norise "nezina" faila kopējo lielumu vai arī cik lejupielādējama ir tā - tas tikai parāda tā lejupielādes ātrumu kopā ar kopējo kā "Nezināms".
Kāpēc pārlūkprogramma nezinātu dažu failu galīgo izmēru? Kur tā iegūst šo informāciju vispirms?
Kur tiešām?
SuperUser ieguldītājs Gronostaj piedāvā šādu ieskatu:
Lai pieprasītu dokumentus no tīmekļa serveriem, pārlūkprogrammas izmanto HTTP protokolu. Jūs varat zināt šo vārdu no jūsu adreses joslas (tas var būt paslēpts tagad, bet, noklikšķinot uz adrešu joslas, kopējiet URL un ielīmējiet to kādā teksta redaktorā, jūs redzēsit
http: //
sākumā). Tas ir vienkāršs teksta protokols, un tas darbojas šādi:Pirmkārt, jūsu pārlūkprogramma pieslēdzas vietnes serverim un nosūta tā dokumenta URL, kuru vēlaties lejuplādēt (arī tīmekļa lapas ir arī dokumenti), kā arī dažas detaļas par pašu pārlūkprogrammu (lietotāja aģents utt.). Piemēram, lai ielādētu galveno lapu SuperUser vietnē,
http://superuser.com/
, mana pārlūkprogramma sūta pieprasījumu, kas izskatās šādi:GET / HTTP / 1.1 Host: superuser.com Savienojums: keep-alive Accept: text / html, application / xhtml + xml, application / xml; q = 0.9, * / *; q = 0.8 Lietotāja aģents: 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: noņemts drošības nolūkos; DNT : 1 ja-modificēts-kopš: Tue, 09 Jul 2013 07:14:17 GMT
Pirmajā rindā norādīts, kurš dokuments serverim jāatgriež. Pārējās līnijas sauc par galvenes; tie izskatās šādi:
Nosaukuma nosaukums: virsraksta vērtība
Šīs līnijas sūta papildu informāciju, kas serverim palīdz izlemt, ko darīt.
Ja viss ir kārtībā, serveris atbildēs, nosūtot pieprasīto dokumentu. Atbilde sākas ar statusa ziņojumu, kam seko dažas galvenes (ar informāciju par dokumentu) un, visbeidzot, ja viss ir labi, dokumenta saturs. Tas ir tas, ko SuperUser servera atbilde manam pieprasījumam izskatās:
HTTP / 1.1 200 OK Cache-Control: publiski, max-age = 60 Content-Type: text / html; charset = utf-8 Derīguma termiņš: Tue, 09 Jul 2013 07:27:20 GMT Pēdējās izmaiņas: Tue, 09 Jul 2013 07:26:20 GMT Mainīt: * X-Frame-opcijas: SAMEORIGIN Datums: T, 09 jūlijs 2013 07:26:19 GMT Content-Length: 139672 [... snip ...]
Pēc pēdējās rindiņas SuperUser serveris aizver savienojumu.
Pirmā rindiņa (
HTTP / 1.1 200 Labi
) satur atbildes kodu, šajā gadījumā tas ir200 OK
. Tas nozīmē, ka serveris atgriezīs dokumentu, kā pieprasīts. Ja serveris to nespēj izdarīt, kods būs kaut kas cits: jūs, iespējams, redzējāt404 nav atrasts
, un403 Aizliegts
ir diezgan izplatīta arī. Tad sākas sekcijas.Kad pārlūks atbildē atrod tukšu rindu, tā zina, ka viss iepriekšējais rindiņš ir pieprasītā dokumenta saturs. Tātad šajā gadījumā
ir SuperUser mājas lapas koda pirmā rinda. Ja es pieprasīju lejupielādējamo dokumentu, tas, iespējams, būtu daži viltīgie rakstzīmes, jo lielākā daļa dokumentu formātu nav lasāmi bez iepriekšējas apstrādes.
Atpakaļ uz galvenēm. Visinteresantākais mums ir pēdējais,
Satura garums
. Tas informē pārlūkprogrammu, cik daudz baitu datus vajadzētu gaidīt pēc tukšas rindas, tādēļ būtībā tas ir dokumenta lielums, kas izteikts baitos. Šis virsraksts nav obligāts, un to var izlaist serveris. Dažreiz dokumenta izmēru nevar prognozēt (piemēram, kad dokuments tiek ģenerēts lidojuma laikā), dažreiz slinki programmētāji to neiekļauj (tas ir diezgan izplatīts vadītāja lejupielādes vietnēs), dažreiz tīmekļa vietnes izveido iesācēji, kas nezina par šādu virsrakstu.Jebkurā gadījumā, neatkarīgi no iemesla, galvenes var nebūt. Tādā gadījumā pārlūkprogramma nezina, cik daudz datu serveris gatavojas sūtīt, un tādējādi parāda dokumenta izmēru kānezināms, gaidot serveri aizvērt savienojumu. Un tas ir iemesls nezināmu dokumentu izmēriem.
Vai kaut ko pievienot paskaidrojumam? Skatieties komentāros. Vēlaties lasīt citas atbildes no citiem tehnoloģiju savvy Stack Exchange lietotājiem? Šeit skatiet pilnu diskusiju pavedienu.