Content-Type ... charset = X和Content-Encoding = X有什么区别?

时间:2011-05-09 14:06:13

标签: http encoding utf-8 http-headers

之间是否存在任何有效差异
Content-Encoding: UTF-8
Content-Type: text/html; charset=utf-8

2 个答案:

答案 0 :(得分:17)

可选参数charset仅适用于基于文本的内容(Content-Types,如text/plaintext/html等。并非所有消息都是文本。

Content-Encoding表示整个身体已经以某种方式编码(通常是压缩的)。此标头的典型值为gzipdeflate。此消息的收件人应解码(例如,ungzip)正文以获取原始消息。

我甚至不确定UTF-8是否有意义作为Content-Encoding的值。

答案 1 :(得分:10)

根据 RFC 7231 - 超文本传输​​协议(HTTP / 1.1):语义和内容Content-Encoding header包含内容编码值的列表。引用the RFC

  

内容编码值表示具有的编码转换      已经或可以应用于表示。内容编纂是      主要用于允许表示压缩或      否则有用的转变而不会失去其身份      底层媒体类型,不会丢失信息。经常,      表示以编码形式存储,直接传输,和      仅由最终收件人解码。

content-coding = token
     

所有内容编码值都不区分大小写,应该是      在“HTTP内容编码注册表”中注册,如中所定义      第8.4节。它们用于Accept-Encoding(第5.3.4节)      和Content-Encoding(第3.1.2.2节)标题字段。

第8.4节说:

  

“HTTP内容编码注册表”定义内容的名称空间      编码名称([RFC7230]第4.2节)。内容编码注册表      保持在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是一个character encoding scheme,它不能用于无损地转换任意二进制数据(至少不会以任何有意义的方式)。将Content-Encoding设置为UTF-8是完全错误的。用户代理可能只是忽略未知值或丢弃该消息并报告错误。设置字符编码方案的正确位置是Content-Type header