HTTP: Что является предпочтительным Accept-Encoding для "gzip,deflate"?

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

Фон:

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

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

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

Вопрос:

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

Accept-Encoding: gzip,deflate

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

2 ответа

Решение

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

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

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

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

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

Другие вопросы по тегам