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.