Возврат сжатых данных, когда клиент пропускает заголовок accept-encoding

Возврат сжатых данных, когда клиент пропускает заголовок accept-encoding

вСтандарт HTTP 1.1, в нем говорится, что «Если в запросе нет поля Accept-Encoding, любое кодирование содержимого считается приемлемым пользовательским агентом».

Это означает, что сервер может, например, вернуть тело ответа, закодированное с помощью gzip, если поле accept-encoding пропущено.

Однако на практике большинство часто используемых серверов (например, Apache, nginx) этого не делают и отправляют несжатый ответ, если поле пропущено.

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

решение1

Никакое кодирование не считается приемлемым, даже если Accept-Encodingзаголовков нет. При отсутствии других указаний, не беспокоиться о сжатии — это распространенный выбор. Экономит работу, явно разрешенную спецификацией.

Если представление не имеет кодирования содержимого, то оно приемлемо по умолчанию, если только оно специально не исключено полем Accept-Encoding, указывающим либо «identity;q=0», либо «*;q=0» без более конкретной записи для «identity».

Или, если не предусмотрено, Accept-Encodingреализация может выбрать все, что захочет, с помощью некоторого алгоритма. Пропуск согласования контента имеет небольшой риск того, что клиент не будет знать, что делать с кодировкой. Лично я хотел бы, Content-Encoding: zstdно по состоянию на 2022 год это не распространено в пользовательских агентах.

Связанный контент