If-Koubou

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? (Jak)

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 tego wszystkiego razem?

Dzisiejsza sesja pytań i odpowiedzi przychodzi do nas dzięki uprzejmości SuperUser - poddziału Stack Exchange, społecznościowego forum 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 - po prostu pokazuje szybkość, z jaką pobiera, 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 internetowych, 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 do edytora 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 również są dokumentami) oraz kilka szczegółów dotyczących samej przeglądarki (User-Agent itp.). Na przykład, aby załadować stronę główną na stronie 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 Akceptuj język: pl-PL, pl; q = 0,8, en-US; q = 0.6, en; q = 0.4 Cookie: [usunięto ze względów bezpieczeństwa] DNT : 1 Zmodyfikowany-Od: wtorek, 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 robić.

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 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 jest200 OK. Oznacza to, że serwer zwróci dokument, zgodnie z żądaniem. Gdy serwer tego nie zrobi, kod będzie czymś innym: prawdopodobnie widziałeś404 Nie Znaleziono, i403 Zabronione jest również dość powszechny. Potem następują nagłówki.

Kiedy przeglądarka znajdzie pusty wiersz w odpowiedzi, wie, że wszystko za tą linią jest treścią żądanego dokumentu. W tym przypadku 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 dla nas jest ostatni,Długość treści. 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 serwer zamierza wysłać, a tym samym wyświetla rozmiar dokumentu jakonieznany, 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.