Как я могу узнать, обслуживает ли мой сервер контент 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.