Как я могу узнать, обслуживает ли мой сервер контент GZipped?


160

У меня есть веб-приложение на сервере NGinx. Я установил gzip onв файле conf, и теперь я пытаюсь увидеть, работает ли он. YSlow говорит, что это не так, но 5 из 6 веб-сайтов, которые проводят тест, говорят, что это так. Как я могу получить определенный ответ на этот вопрос и почему есть разница в результатах?

Ответы:


229

Похоже, один из возможных ответов, что неудивительно, таков 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

Во втором случае клиент сообщает серверу, что он поддерживает кодирование содержимого, и вы можете видеть, что ответ действительно был более коротким и сжатым.


3
Это правда, но gzip можно настроить для сжатия определенных типов файлов и исключения других. Поэтому убедитесь, что файлы, которые вы скручиваете с помощью этого теста, относятся к типу, который будет сжат.
Тайлер Биско

5
Я бы предложил использовать -Lфлаг для того, curlчтобы следовать всем перенаправлениям, например, не из www, www.иначе результат size_download может быть неправильным
vladkras

Если бы я мог впечатлить одну вещь на моих младших разработчиков, это важность иметь прочную основу Unix. +1 за CURL. Сначала сбивает с толку, спасатель жизни, когда вы это знаете.
Акрон

105

Обновить

Chrome изменил способ сообщения (см. Оригинальный ответ, если интересно). Вы можете сказать, используя Инструменты разработчика (F12). Перейдите на вкладку Сеть, выберите файл, который вы хотите проверить, а затем посмотрите на вкладку Заголовки справа. Если вы заархивированы, вы увидите это в Content-Encoding.

В этом примере slider.jpg действительно распаковывается.

введите описание изображения здесь

Сравните это с той самой страницей, на которой вы находитесь, и посмотрите на файл png, вы не увидите такого обозначения.

введите описание изображения здесь

Просто чтобы быть ясно, это не потому, что один JPG, а другой PNG. Это потому, что один взломан, а другой нет.


Предыдущий ответ

В Chrome, если вы откроете Инструменты разработчика и перейдете на вкладку Сеть, то при отсутствии сжатия будет отображаться следующее:

введите описание изображения здесь

И следующее, если есть сжатие:

введите описание изображения здесь

Другими словами, одно и то же число сверху и снизу означает отсутствие сжатия.


3
Может быть, лучше проверить заголовки ответа. Этот метод не сообщает, используется ли сжатие gzip или какой-либо другой алгоритм сжатия.
Самуил

4
В Chrome Developer Tools на вкладке «Сеть» нажмите на имя ресурса / ссылку для запроса, и вы можете просмотреть заголовки ответа, как показано ниже, и посмотреть gzipключ шифрования содержимого! [Снимок экрана] [1] [1]: i.stack .imgur.com / Bpb5W.png (http://content.screencast.com/users/…
d48

1
Последние версии Chrome (версия 44.0.2403.130 m), похоже, не показывают детали размера / содержимого - я имею в виду детали gzip - i.imgur.com/MTz7DCM.png . Кто-нибудь знает причину почему?
Энди Дюфрен

33

Смотрите в заголовках ответа. В FireFox вы можете проверить с помощью Firebug.

Content-Encoding    gzip

Если сервер поддерживает контент gzip, это должно быть отображено.


9
Вы получите это, только если ваш клиент отправил «Accept-Encoding: gzip, deflate»
Maciej Swic

2
Жесткое обновление, чтобы увидеть кодировку исходного файла, поскольку, когда файл обслуживается со статусом 304, кажется, что кэшированная версия уже разархивирована! (в моем случае я вижу заголовок ETag, а не Content-Encoding)
ptim

11

В новой версии Chrome, Инструменты разработчика> сеть, вы можете щелкнуть правой кнопкой мыши по имени столбца, выбрать опцию кодирования содержимого и добавить этот столбец (черный ящик на изображении).

и если вы хотите увидеть размер этого gzip-контента как @Outfast Source - вы можете нажать на иконку рядом с View (отображается как зеленое поле на изображении).

так что вы можете увидеть, какой контент включен gzip.

введите описание изображения здесь


Это отличный ответ, но <kbd> Content-Encoding </ kbd> переместился в <kbd> заголовки ответа </ kbd>.
Дан Даскалеску


8

Я написал этот сценарий на основе ответа зул:

#!/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

пример:

$ ./script.sh https://example.com/
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.