Mājas lapa » » Kāpēc manā tīmekļa pārlūkprogrammā dažreiz neizdodas atainot atlikušos lejupielādes laikus?

    Kāpēc manā tīmekļa pārlūkprogrammā dažreiz neizdodas atainot atlikušos lejupielādes laikus?

    Dažreiz uzticamais lejupielādes progresa mērītājs jūsu pārlūkprogrammā (vai citā lietojumprogrammā) vienkārši met tās rokas gaisā un atsakās no atlikušā lejupielādes laika. Kāpēc reizēm tiek ieslēgts plānotais lejupielādes laiks un dažreiz tas netiek ziņots kopā?

    Šodienas jautājumu un atbilžu sesija mums dod pieklājību no SuperUser-Stack Exchange apakšnodaļas, kas ir kopienas orientēta Q & A tīmekļa vietņu grupa.

    Jautājums

    SuperUser lasītājs Coldblackice vēlas uzzināt, kāpēc viņa pārlūkprogramma ne vienmēr ēd netīrumus:

    Reizēm, lejupielādējot failu tīmekļa pārlūkprogrammā, lejupielādes progress „nezina” faila kopējo lielumu vai to, cik tālu tas ir lejupielādētajā failā - tas tikai parāda ātrumu, kādā tas tiek lejupielādēts. kā “Nezināms”.

    Kāpēc pārlūks nezina dažu failu galīgo izmēru? Kur tā vispirms saņem šo informāciju?

    Kur tiešām?

    Atbildes

    SuperUser ziedotā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 nosaukumu no sava adrešu 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ēsiet http: // sākumā). Tas ir vienkāršs teksta protokols, un tas darbojas šādi:

    Pirmkārt, jūsu pārlūkprogramma izveido savienojumu ar vietnes serveri un nosūta tā dokumenta URL, kuru tā vēlas lejupielādēt (arī tīmekļa lapas ir dokumenti) un dažas ziņ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/, mans pārlūks nosūta pieprasījumu, kas izskatās šādi:

    GET / HTTP / 1.1 Host: superuser.com Savienojums: keep-alive Pieņemt: 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) Pieņemt-kodēšanu: gzip, deflate, sdch Accept-Language: pl-PL, pl; q = 0,8, en-US; q = 0.6, en; q = 0.4 sīkfails: [noņemts drošībai] DNT : 1 Ja-Modificēts-Kopš: Tue, 09 Jul 2013 07:14:17 GMT 

    Pirmajā rindā norādīts, kurš dokuments serverim jāatgriežas. Pārējās līnijas sauc par galvenēm; tie izskatās šādi:

    Header name: Header vērtība 

    Šīs līnijas sūta papildu informāciju, kas palīdz serverim izlemt, ko darīt.

    Ja viss ir labi, serveris atbildēs, nosūtot pieprasīto dokumentu. Atbilde sākas ar statusa ziņojumu, kam seko daži galvenes (ar informāciju par dokumentu), un visbeidzot, ja viss ir labi, dokumenta saturs. Šis ir tas, ko SuperUser servera atbilde manam pieprasījumam izskatās šādi:

    HTTP / 1.1 200 OK Kešatmiņa-kontrole: publiska, maksimālais vecums = 60 Saturs-tips: text / html; charset = utf-8 Beidzas: Ot, 09 Jūl 2013 07:27:20 GMT Pēdējā modifikācija: Ot, 09 Jūl 2013 07:26:20 GMT Vary: * X-Frame-Opcijas: SAMEORIGIN Datums: otrds, 09 Jūl 2013 07:26:19 GMT satura garums: 139672 [… snip…]  

    Pēc pēdējās rindas SuperUser serveris aizver savienojumu.

    Pirmā rinda (HTTP / 1.1 200 Labi) satur atbildes kodu, šajā gadījumā tas ir 200 Labi. Tas nozīmē, ka serveris pēc pieprasījuma nosūtīs dokumentu atpakaļ. Kad serveris neizdodas to darīt, kods būs kaut kas cits: jūs, iespējams, esat redzējis 404 nav atrasts, un 403 Aizliegts ir diezgan izplatīta. Tad seko galvenes.

    Ja pārlūkprogrammā atbildē ir atrodama tukša rinda, tā zina, ka viss, kas pārsniedz šo līniju, ir tā dokumenta saturs, kuru tā pieprasīja. Tātad šajā gadījumā  ir SuperUser's mājas lapas pirmās rindas. Ja es pieprasīju lejupielādējamu dokumentu, visticamāk, tas būtu daži gibberish 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. Tā informē pārlūkprogrammu, cik daudz baitu datu jāgaida pēc tukšās līnijas, tāpēc būtībā tas ir dokumenta lielums, kas izteikts baitos. Šī galvene nav obligāta, un serveris to var izlaist. Dažreiz dokumenta lielumu nevar prognozēt (piemēram, kad dokuments tiek ģenerēts lidojumā), dažreiz slinki programmētāji to neiekļauj (vadītāju lejupielādes vietnēs tas ir diezgan bieži), dažreiz tīmekļa vietnes izveido newbies, kas nezina šādas galvenes.

    Jebkurā gadījumā, neatkarīgi no tā, kas ir iemesls, galvenes var nebūt. Tādā gadījumā pārlūks nezina, cik daudz datu serveris nosūtīs, un tādējādi parāda dokumenta lielumu nav zināms, gaidot, ka serveris slēdz savienojumu. Un tas ir iemesls nezināmu dokumentu izmēriem.


    Vai kaut kas jāpievieno paskaidrojumam? Skaņas izslēgšana komentāros. Vai vēlaties lasīt vairāk atbildes no citiem tehnoloģiju gudriem Stack Exchange lietotājiem? Apskatiet pilnu diskusiju pavedienu šeit.