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 jest200 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
, i403 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.