Skip to content

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

20 de lipiec de 2021
img 5212457224ca9 1024x469 1

Czasami 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 określa przewidywany czas pobierania, a czasami nie zgłasza tego wszystkiego razem?

Dzisiejsza sesja pytań i odpowiedzi przychodzi do nas dzięki uprzejmości SuperUser — pododdziału Stack Exchange, społecznościowej grupy witryn z pytaniami i odpowiedziami.

Pytanie

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

Czasami podczas pobierania pliku w przeglądarce internetowej postęp pobierania nie „wie” całkowitego rozmiaru pliku ani tego, jak daleko jest w pobieraniu — pokazuje tylko prędkość, z jaką jest pobierane, z całkowitym jako „Nieznany”.

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

Gdzie rzeczywiście?

Odpowiedzi

Współtwórca SuperUser Gronostaj oferuje następujący wgląd:

Do żądania dokumentów z serwerów WWW przeglądarki używają protokołu HTTP. Możesz znać tę nazwę z paska adresu (może być teraz ukryta, ale gdy klikniesz pasek adresu, skopiuj adres URL i wklej go w jakimś edytorze tekstu, zobaczyszhttp://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 też są dokumentami) oraz pewne szczegóły dotyczące samej przeglądarki (Agent użytkownikaitp). 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
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

Pierwsza linia określa dokument, który serwer powinien zwrócić. Pozostałe wiersze nazywane są nagłówkami; wyglądają tak:

Header name: Header value

Te wiersze 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ź zaczyna się od komunikatu o stanie, po którym następuje kilka nagłówków (ze szczegółami dokumentu), a na końcu, 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
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

<!DOCTYPE html>
<html>
[...snip...] </html>

Po ostatniej linii serwer SuperUser zamyka połączenie.

Pierwsza linia (HTTP/1.1 200 OK) zawierakod odpowiedzi, w tym przypadku to200 OK. Oznacza to, że serwer zwróci dokument zgodnie z żądaniem. Gdy serwerowi się to nie uda, kod będzie czymś innym: pewnie widzieliście404 Not Found, i403 Forbiddenjest też dość powszechny. Potem następują nagłówki.

Gdy przeglądarka znajdzie w odpowiedzi pustą linię, wie, że wszystko poza tą linią jest treścią żądanego dokumentu. Więc w tym przypadku<!DOCTYPE html>to pierwsza linia kodu strony głównej SuperUser. Gdybym poprosił o pobranie dokumentu, prawdopodobnie byłyby to jakieś bełkotliwe znaki, ponieważ większość formatów dokumentów jest nieczytelna bez wcześniejszego przetworzenia.

Powrót do nagłówków. Najciekawszy dla nas jest ten ostatni,Content-Length. Informuje przeglądarkę, ile bajtów danych powinna oczekiwać po pustej linii, więc w zasadzie jest to rozmiar dokumentu wyrażony w bajtach. Ten nagłówek nie jest obowiązkowy i serwer może go pominąć. 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 na stronach pobierania sterowników), czasami strony internetowe są tworzone przez początkujących, którzy nie wiedzą takiego nagłówka.

W każdym razie, bez względu na przyczynę, może brakować nagłówka. W takim przypadku przeglądarka nie wie, ile danych wyśle ​​serwer, dlatego wyświetla rozmiar dokumentu jakonieznany, czekając na zamknięcie połączenia przez serwer. I to jest powód nieznanych rozmiarów dokumentów.

Masz coś do dodania do wyjaśnienia? Dźwięk w komentarzach. Chcesz przeczytać więcej odpowiedzi od innych doświadczonych technologicznie użytkowników Stack Exchange?Sprawdź pełny wątek dyskusji tutaj.

Czy ten post był pomocny?