14Sep

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

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 przybija planowany czas pobierania, a czasami nie raportuje tego wszystkiego razem?

Dzisiejsze pytanie &Sesja odpowiedzi przychodzi do nas dzięki uprzejmości SuperUser - poddziału Stack Exchange, opartego na społecznościach grupy Q & A.

Pytanie Czytnik

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

Czasami, podczas pobierania pliku w przeglądarce, postęp pobierania nie "zna" całkowitego rozmiaru pliku, lubjak daleko się znajduje w pobranym pliku - po prostu pokazuje prędkość, z jaką pobiera, z łączną wartością "nieznany".

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

Gdzie rzeczywiście?

The Answers

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

Aby zażądać dokumentów od serwerów internetowych, 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, na początku zobaczysz http: //).Jest to prosty protokół tekstowy i działa w następujący sposób:

Najpierw twoja 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 następująco:

GET / HTTP / 1.1 Host: superuser.com Połączenie: 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 Akceptuj Język: pl-PL, pl; q = 0,8, en-US; q = 0,6, en; q = 0,4 Cookie: [usunięte dla bezpieczeństwa] DNT: 1 If-Modified-Since: Tue, 09 Jul 2013 07:14:17 GMT

The firstlinia 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

Te linie 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 Vary: * X-Frame-Options: SAMEORIGIN Data: wt., 09 lipca 201307:26:19 GMT Długość treści: 139672 & lt;! DOCTYPE html & gt;& lt; html & gt;[... snip. ..] & lt; / html & gt;

Po ostatniej linii serwer SuperUser zamyka połączenie.

Pierwsza linia( HTTP / 1.1 200 OK) zawiera kod odpowiedzi, w tym przypadku 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, a 403 Forbidden również jest dość powszechne. Potem następują nagłówki.

Gdy przeglądarka znajdzie pusty wiersz w odpowiedzi, wie, że wszystko za tą linią jest treścią żądanego dokumentu. W tym przypadku & lt;! DOCTYPE html & gt;to pierwsza linia kodu strony głównej SuperUser. Gdybym zażądał pobrania dokumentu, prawdopodobnie byłyby to jakieś bełkotliwe znaki, ponieważ większość formatów dokumentów jest nieczytelna bez wcześniejszego przetwarzania.

Powrót do nagłówków. Najbardziej interesujący jest dla nas ostatni, Content-Length. Informuje przeglądarkę, ile bajtów danych powinno oczekiwać po pustym wierszu, więc zasadniczo 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ść często na stronach pobierania sterownika), 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 ma wysłać serwer, a tym samym wyświetla rozmiar dokumentu jako nieznany , czekając, aż serwer zamknie połączenie. 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.