Główna » jak » Dlaczego czasami moja przeglądarka internetowa nie wyświetla pozostałych czasów pobierania?

    Dlaczego czasami moja przeglądarka internetowa nie wyświetla pozostałych czasów pobierania?

    Czasem wierny wskaźnik postępu pobierania w przeglądarce (lub innej aplikacji) po prostu wyrzuca ręce w powietrze i rezygnuje z wyświetlania pozostałego czasu pobierania. Dlaczego czasami przybija planowany czas pobierania, a czasami nie raportuje wszystkiego razem?

    Dzisiejsza sesja pytań i odpowiedzi przychodzi do nas dzięki uprzejmości SuperUser - poddziału Stack Exchange, opartego na społecznościach grupowania witryn z pytaniami i odpowiedziami.

    Pytanie

    Czytnik SuperUser Coldblackice chce wiedzieć, dlaczego jego przeglądarka nie zawsze zmywa brud:

    Czasami, podczas pobierania pliku w przeglądarce internetowej, postęp pobierania nie "zna" całkowitego rozmiaru pliku lub odległości w pobranym pliku - pokazuje tylko szybkość, z jaką pobierany jest plik, z całkowitą jako "Nieznany".

    Dlaczego przeglądarka nie zna ostatecznego rozmiaru niektórych plików? Skąd bierze te informacje w pierwszej kolejności?

    Gdzie rzeczywiście?

    Odpowiedzi

    Pomocnik SuperUser Gronostaj oferuje następujący wgląd:

    Aby zażądać dokumentów z serwerów sieciowych, przeglądarki używają protokołu HTTP. Możesz znać tę nazwę z paska adresu (może być teraz ukryta, ale po kliknięciu paska adresu skopiuj adres URL i wklej go do edytora tekstu, zobaczysz http: // na początku). Jest to prosty protokół tekstowy i działa tak:

    Najpierw przeglądarka łączy się z serwerem witryny i wysyła adres URL dokumentu, który chce pobrać (strony internetowe również są dokumentami) i kilka szczegółów dotyczących samej przeglądarki (User-Agent itp.). Na przykład, aby załadować stronę główną w witrynie SuperUser, http://superuser.com/, moja przeglądarka wysyła żądanie, które wygląda tak:

    GET / HTTP / 1.1 Host: superuser.com Połączenie: keep-alive Zaakceptuj: 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: [usunięto dla bezpieczeństwa] DNT : 1 Zmodyfikowany - od: wt., 09 lipca 2013 07:14:17 GMT 

    Pierwszy wiersz określa, który dokument powinien zostać zwrócony przez serwer. Pozostałe linie nazywają się nagłówkami; wyglądają tak:

    Nazwa nagłówka: wartość nagłówka 

    Linie te wysyłają dodatkowe informacje, które pomagają serwerowi zdecydować, co zrobić.

    Jeśli wszystko jest w porządku, serwer odpowie wysyłając żądany dokument. Odpowiedź rozpoczyna się od komunikatu o statusie, po którym następuje kilka nagłówków (ze szczegółami na temat dokumentu) i wreszcie, jeśli wszystko jest w porządku, zawartość dokumentu. Tak wygląda odpowiedź serwera SuperUser na moje żądanie:

    HTTP / 1.1 200 OK Cache-Control: public, max-age = 60 Content-Type: text / html; charset = utf-8 Wygasa: wt, 09 lip 2013 07:27:20 GMT Ostatnio zmodyfikowano: wt, 09 lip 2013 07:26:20 GMT Różnica: * Opcje X-Frame: SAMEORIGIN Data: wt., 09 lipca 2013 07:26:19 GMT Długość treści: 139672 [... snip ...]  

    Po ostatnim wierszu serwer SuperUser zamyka połączenie.

    Pierwsza linia (HTTP / 1.1 200 OK) zawiera kod odpowiedzi, w tym przypadku jest 200 OK. Oznacza to, że serwer zwróci dokument, zgodnie z żądaniem. Kiedy serwer nie zdąży tego zrobić, kod będzie czymś innym: prawdopodobnie widziałeś 404 Nie Znaleziono, i 403 Zabronione jest dość powszechny. Potem następują nagłówki.

    Kiedy przeglądarka znajdzie pusty wiersz w odpowiedzi, wie, że wszystko za tym wierszem jest treścią żądanego dokumentu. W tym przypadku  to pierwsza linia kodu strony głównej SuperUser. Gdybym prosił o pobranie dokumentu, prawdopodobnie byłby to kilka bełkotliwych znaków, ponieważ większość formatów dokumentów jest nieczytelna bez wcześniejszego przetwarzania.

    Powrót do nagłówków. Najbardziej interesujący dla nas jest ostatni, Długość treści. Informuje przeglądarkę, ile bajtów danych powinno oczekiwać po pustym wierszu, więc w zasadzie jest to rozmiar dokumentu wyrażony w bajtach. Ten nagłówek nie jest obowiązkowy i może zostać pominięty przez serwer. Czasami nie można przewidzieć rozmiaru dokumentu (na przykład, gdy dokument jest generowany w locie), czasami leniwi programiści go nie uwzględniają (dość powszechne w witrynach pobierania sterowników), czasami strony są tworzone przez początkujących, którzy nie wiedzą takiego nagłówka.

    W każdym razie, bez względu na przyczynę, brakuje nagłówka. W takim przypadku przeglądarka nie wie, ile danych serwer zamierza wysłać, a tym samym wyświetla rozmiar dokumentu jako nieznany, oczekiwanie na zamknięcie połączenia przez serwer. I to jest powód nieznanych rozmiarów dokumentów.


    Czy masz coś do dodania do wyjaśnienia? Dźwięk w komentarzach. Chcesz przeczytać więcej odpowiedzi od innych użytkowników Stack Exchange, którzy znają się na technologii? Sprawdź cały wątek dyskusji tutaj.