HTTP: какова предпочтительная кодировка Accept-Encoding для gzip, deflate?

Этот вопрос касается порядка приоритета медиа-типов HTTP-заголовка «Accept-Encoding», когда все они имеют одинаковый вес и были заданы этот комментарий в моем блоге.

Задний план:

Заголовок Accept-Encoding содержит разделенный запятыми список типов мультимедиа, которые браузер может принять, например. сжать, выкачать

Также можно указать коэффициент качества, чтобы отдать предпочтение другим типам мультимедиа, например. в случае "gzip;q=.8,deflate" предпочтительнее использовать deflate, но он не относится к данному вопросу. NB: тип с «q=0» означает «неприемлемо».

RFC2616 также указывает, что "наиболее конкретная ссылка" для типа носителя определение должно быть взвешено в первую очередь. то есть "text/html;level=1" следует использовать вместо "text/html" - это также не относится к вопросу.

Вопрос:

В следующем случае, какой тип носителя имеет приоритет?

Accept-Encoding: gzip,deflate

Оба типа имеют эквивалентный коэффициент качества 1, и оба типа "приемлемы" для браузера, поэтому можно использовать любой из них. Я всегда предполагал, что первый введенный тип должен быть «предпочтительным», но, похоже, нет конкретного примера или предпочтения для этого конкретного случая в RFC.


person Dave Transom    schedule 11.07.2010    source источник


Ответы (2)


Я полагаю, что где-то в RFC или в связанном RFC говорится, что первое предпочтительнее для всех полей этого формата.

Однако в особом случае gzip vs deflate вам, вероятно, следует использовать deflate, если это возможно, из-за меньших накладных расходов (меньше верхних и нижних колонтитулов, и хотя у него все еще есть контрольная сумма adler32, у него нет crc32 сверху). В остальном они точно такие же. Фактические данные сжимаются одинаково для обоих. Это означает, что deflate выполняется быстрее и производит меньший результат. Оба они становятся гораздо более важными на странице с большой нагрузкой. Большинство дополнительных заголовков в gzip — это такие вещи, как права доступа к файлам в стиле unix, которые в любом случае бесполезны в этом контексте.

Действительно, клиенты должны хотеть обслуживаться gzip из-за надежности, а серверы должны хотеть обслуживать deflate из-за производительности. Дополнительные накладные расходы гораздо важнее, когда это происходит тысячи раз в секунду, чем когда это происходит один раз для каждой загружаемой страницы.

На своих сайтах я сначала проверяю наличие deflate и использую его, если могу, затем проверяю gzip. Если я не могу использовать ни то, ни другое, я просто отправляю в виде простого текста. Я не знаю, какой язык вы используете, но для этого требуется около 5 строк ASP.NET.

person GEorge Helyar    schedule 20.07.2010
comment
Я также думал, что в RFC указано, что первая запись является предпочтительной, но не смог найти конкретную ссылку, чтобы прояснить ее. Отличная информация о том, почему вы бы предпочли один, а не другой. - person Dave Transom; 22.07.2010

Здесь нет предпочтений на стороне клиента. Просто выберите то, что вы (на стороне сервера) предпочитаете.

person BalusC    schedule 12.07.2010