Подтвердить что ты не робот

В чем разница между Content-Type... charset = X и Content-Encoding = X?

Существует ли какая-либо эффективная разница между

Content-Encoding: UTF-8
Content-Type: text/html; charset=utf-8

?

4b9b3361

Ответ 1

Необязательный параметр charset имеет смысл только для текстового контента (Content-Types например text/plain, text/html и т.д.). Не все сообщения являются текстовыми.

Content-Encoding означает, что все тело каким-то образом закодировано (обычно сжато). Типичными значениями для этого заголовка являются gzip и deflate. Получатель этого сообщения должен декодировать (например, ungzip) тело, чтобы получить исходное сообщение.

Я даже не уверен, имеет ли смысл UTF-8 в качестве значения для Content-Encoding.

Ответ 2

Согласно RFC 7231 - Протокол передачи гипертекста (HTTP/1.1): семантика и контент, заголовок Content-Encoding содержит список значений кодирования контента. Цитируя RFC:

Значения кодирования содержимого указывают преобразование кодирования, которое было или может быть применено к представлению. Кодирование содержимого в основном используется для того, чтобы обеспечить сжатие или иное полезное преобразование представления без потери идентичности его основного типа носителя и без потери информации. Часто представление сохраняется в кодированной форме, передается напрямую и декодируется только конечным получателем.

content-coding = token

Все значения кодирования содержимого нечувствительны к регистру и должны быть зарегистрированы в "Реестре кодирования содержимого HTTP", как определено в разделе 8.4. Они используются в полях заголовка Accept-Encoding (раздел 5.3.4) и Content-Encoding (раздел 3.1.2.2).

Раздел 8.4 говорит:

"Реестр кодирования содержимого HTTP" определяет пространство имен для имен кодирования содержимого (раздел 4.2 [RFC7230]). Реестр кодирования контента ведется по адресу http://www.iana.org/assignments/http-parameters.

В настоящее время в реестре перечислены:

br           Brotli Compressed Data Format                [RFC7932]     
compress     UNIX "compress" data format                  [RFC7230] Section 4.2.1
deflate      "deflate" compressed data ([RFC1951])        [RFC7230] Section 4.2.2
             inside the "zlib" data format ([RFC1950])
exi          W3C Efficient XML Interchange
gzip         GZIP file format [RFC1952]                   [RFC7230] Section 4.2.3
identity     Reserved (synonym for "no encoding" in       [RFC7231] Section 5.3.4
             Accept-Encoding)
pack200-gzip Network Transfer Format for Java Archives
x-compress   Deprecated (alias for compress)              [RFC7230] Section 4.2.1
x-gzip       Deprecated (alias for gzip)                  [RFC7230] Section 4.2.3

UTF-8 - это схема кодирования символов, которую нельзя использовать для преобразования произвольных двоичных данных без потерь (по крайней мере, не таким образом, чтобы это имело какой-либо смысл). Просто неправильно устанавливать Content-Encoding на UTF-8. Пользовательские агенты могут просто игнорировать неизвестное значение или отменить сообщение и сообщить об ошибке. Правильным местом для установки схемы кодировки символов является заголовок Content-Type.