Jak mogę sprawdzić, czy mój serwer obsługuje zawartość GZip?


160

Mam aplikację internetową na serwerze NGinx. Ustawić gzip onw pliku conf i teraz staram się sprawdzić, czy to działa. YSlow twierdzi, że tak nie jest, ale 5 na 6 witryn, które przeprowadzają test, twierdzi, że tak. Jak mogę uzyskać ostateczną odpowiedź na ten temat i dlaczego są różnice w wynikach?

Odpowiedzi:


229

To wygląda jak jedna możliwa odpowiedź jest zaskoczeniem, curl:

$ curl http://example.com/ --silent --write-out "%{size_download}\n" --output /dev/null
31032
$ curl http://example.com/ --silent -H "Accept-Encoding: gzip,deflate" --write-out "%{size_download}\n" --output /dev/null
2553

W drugim przypadku klient informuje serwer, że obsługuje kodowanie treści i widać, że odpowiedź była rzeczywiście krótsza, skompresowana.


3
To prawda, ale program gzip można skonfigurować tak, aby kompresował określone typy plików i wykluczał inne. Dlatego upewnij się, że pliki zwijane za pomocą tego testu są typu, który zostanie skompresowany.
Tyler Biscoe

5
Sugerowałbym użycie -Lflagi for curltoo, aby podążać za wszystkimi przekierowaniami, np. Z innych niż www do w www.przeciwnym razie wynik size_download może być nieprawidłowy
vladkras

Gdybym mógł zaimponować moim młodszym programistom jedną rzecz, to znaczenie posiadania solidnego fundamentu dla Uniksa. +1 dla CURL. Na początku jest to zagmatwane, ratuje życie, kiedy to wiesz.
Akron

105

Aktualizacja

Chrome zmienił sposób raportowania (zobacz oryginalną odpowiedź, jeśli jesteś zainteresowany). Możesz to stwierdzić za pomocą narzędzi deweloperskich (F12). Przejdź do karty Sieć, wybierz plik, który chcesz sprawdzić, a następnie spójrz na kartę Nagłówki po prawej stronie. Jeśli jesteś spakowany gzipem, zobaczysz to w Content-Encoding.

W tym przykładzie slider.jpg jest rzeczywiście zapisywany na gzipie.

wprowadź opis obrazu tutaj

Porównaj to z tą stroną, na której jesteś i spójrz na plik png, nie zobaczysz takiego oznaczenia.

wprowadź opis obrazu tutaj

Żeby było jasne, nie dzieje się tak dlatego, że jeden to jpg, a drugi to png. Dzieje się tak, ponieważ jeden jest spakowany na gzip, a drugi nie.


Poprzednia odpowiedź

W przeglądarce Chrome, jeśli wyciągniesz Narzędzia programistyczne i przejdziesz do karty Sieć, pokaże się następujące informacje, jeśli nie ma kompresji:

wprowadź opis obrazu tutaj

A jeśli jest kompresja:

wprowadź opis obrazu tutaj

Innymi słowy, ta sama liczba, na górze i na dole, oznacza brak kompresji.


3
Może lepiej sprawdzić nagłówki odpowiedzi. Ta metoda nie określa, czy ma być używana kompresja gzip, czy inny algorytm kompresji.
Samuel

4
W Narzędziach dla programistów Chrome na karcie Sieć kliknij nazwę zasobu / łącze do żądania i możesz sprawdzić nagłówki odpowiedzi w ten sposób i sprawdzić gzipklucz Content-Encoding! [Zrzut ekranu] [1] [1]: i.stack .imgur.com / Bpb5W.png (http://content.screencast.com/users/…
d48,

1
Najnowsze wersje chrome (wersja 44.0.2403.130 m) nie wydają się pokazywać szczegółów rozmiaru / zawartości - mam na myśli szczegóły gzip - i.imgur.com/MTz7DCM.png . Czy ktoś wie, dlaczego?
Andy Dufresne

33

Zobacz w nagłówkach odpowiedzi. W FireFox możesz sprawdzić za pomocą Firebug.

Content-Encoding    gzip

Jeśli serwer obsługuje zawartość gzip, powinno to zostać wyświetlone.


9
Dostaniesz to tylko wtedy, gdy Twój klient wysłał „Accept-Encoding: gzip, deflate”
Maciej Swic

2
Twarde odświeżanie, aby zobaczyć kodowanie oryginalnego pliku, ponieważ gdy plik jest obsługiwany ze statusem 304, wygląda na to, że wersja z pamięci podręcznej jest już rozpakowana! (w moim przypadku widzę nagłówek ETag zamiast Content-Encoding)
ptim

11

W nowej wersji chrome, Narzędzia programistyczne> sieć, możesz kliknąć prawym przyciskiem myszy nazwę kolumny, wybrać opcję kodowania treści i dodać tę kolumnę (czarne pole na obrazku).

a jeśli chcesz zobaczyć rozmiar tej zawartości gzip, jako @Outfast Source - możesz kliknąć ikonę, która jest obok widoku (wyświetlana jako zielone pole na obrazku).

dzięki czemu możesz zobaczyć, która zawartość obsługuje gzip.

wprowadź opis obrazu tutaj


To świetna odpowiedź, ale <kbd> Content-Encoding </kbd> zostało przeniesione do <kbd> Response Headers </kbd>.
Dan Dascalescu


8

Napisałem ten skrypt w oparciu o odpowiedź zoula:

#!/bin/bash

URL=$1
PLAIN="$(curl $URL --silent --write-out "%{size_download}\n" --output /dev/null)"
GZIPPED="$(curl $URL --silent -H "Accept-Encoding: gzip,deflate" --write-out "%{size_download}\n" --output /dev/null)"

if test $PLAIN -gt $GZIPPED
then echo "supported"
else echo "unsupported"
fi

przykład:

$ ./script.sh https://example.com/
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.