aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/web/http/headers/accept-encoding/index.html
blob: f2379df8d143fbc780d378950201696b3aecf6ab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
---
title: Accept-Encoding
slug: Web/HTTP/Headers/Accept-Encoding
tags:
  - Accept-Encoding
  - 内容协商
  - 请求头
translation_of: Web/HTTP/Headers/Accept-Encoding
---
<div>{{HTTPSidebar}}</div>

<p>HTTP 请求头 <strong>Accept-Encoding </strong>会将客户端能够理解的内容编码方式——通常是某种压缩算法——进行通知(给服务端)。通过内容协商的方式,服务端会选择一个客户端提议的方式,使用并在响应头 {{HTTPHeader("Content-Encoding")}} 中通知客户端该选择。</p>

<p>即使客户端和服务器都支持相同的压缩算法,在 identity 指令可以被接受的情况下,服务器也可以选择对响应主体不进行压缩。导致这种情况出现的两种常见的情形是:</p>

<ul>
 <li>要发送的数据已经经过压缩,再次进行压缩不会导致被传输的数据量更小。一些图像格式的文件会存在这种情况;</li>
 <li><span>服务器超载,无法承受压缩需求导致的计算开销。通常,如果服务器使用超过80%的计算能力,微软建议不要压缩。</span></li>
</ul>

<p>只要 identity —— 表示不需要进行任何编码——没有被明确禁止使用(通过 identity;q=0 指令或是 *;q=0 而没有为 identity 明确指定权重值),则服务器禁止返回表示客户端错误的 {{HTTPStatus("406")}} Not Acceptable 响应。</p>

<div class="note"><strong>注意:</strong>

<ul>
 <li>
  <p>IANA 维护了<a class="external" href="http://www.iana.org/assignments/http-parameters/http-parameters.xml#http-parameters-1">一个完整的官方支持的编码方式列表</a></p>
 </li>
 <li>另外两种编码方式—— bzip 和 bzip2 ——有时候也会用到,尽管并未在标准中出现。这两种方式实现了 UNIX 系统上的同名程序所采用的算法。注意第一种由于专利许可问题已经停止维护。</li>
</ul>
</div>

<table class="properties">
 <tbody>
  <tr>
   <th scope="row">Header type</th>
   <td>{{Glossary("Request header")}}</td>
  </tr>
  <tr>
   <th scope="row">{{Glossary("Forbidden header name")}}</th>
   <td>yes</td>
  </tr>
 </tbody>
</table>

<h2 id="语法">语法</h2>

<pre class="syntaxbox">Accept-Encoding: gzip
Accept-Encoding: compress
Accept-Encoding: deflate
Accept-Encoding: br
Accept-Encoding: identity
Accept-Encoding: *

// Multiple algorithms, weighted with the {{Glossary("Quality Values", "quality value")}} syntax:
Accept-Encoding: deflate, gzip;q=1.0, *;q=0.5</pre>

<h2 id="指令">指令</h2>

<dl>
 <dt><code>gzip</code></dt>
 <dd>表示采用 <a class="external external-icon" href="http://en.wikipedia.org/wiki/LZ77_and_LZ78#LZ77">Lempel-Ziv coding</a> (LZ77) 压缩算法,以及32位CRC校验的编码方式。</dd>
 <dt><code>compress</code></dt>
 <dd>采用 <a class="external external-icon" href="http://en.wikipedia.org/wiki/LZW">Lempel-Ziv-Welch</a> (LZW) 压缩算法。</dd>
 <dt><code>deflate</code></dt>
 <dd>采用 <a href="http://en.wikipedia.org/wiki/Zlib">zlib</a> 结构和 <a href="http://en.wikipedia.org/wiki/DEFLATE"><em>deflate</em></a> 压缩算法。</dd>
 <dt><code>br</code></dt>
 <dd>表示采用 <a href="https://en.wikipedia.org/wiki/Brotli">Brotli</a> 算法的编码方式。</dd>
 <dt><code>identity</code></dt>
 <dd>用于指代自身(例如:未经过压缩和修改)。除非特别指明,这个标记始终可以被接受。</dd>
 <dt><code>*</code></dt>
 <dd>匹配其他任意未在该请求头字段中列出的编码方式。假如该请求头字段不存在的话,这个值是默认值。它并不代表任意算法都支持,而仅仅表示算法之间无优先次序。</dd>
 <dt><code>;q=</code> (qvalues weighting)</dt>
 <dd>值代表优先顺序,用相对<a href="/en-US/docs/Glossary/Quality_values">质量价值</a> 表示,又称为权重。</dd>
</dl>

<h2 id="示例">示例</h2>

<pre>Accept-Encoding: gzip

Accept-Encoding: gzip, compress, br

Accept-Encoding: br;q=1.0, gzip;q=0.8, *;q=0.1
</pre>

<h2 id="规范">规范</h2>

<table class="standard-table">
 <tbody>
  <tr>
   <th scope="col">Specification</th>
   <th scope="col">Title</th>
  </tr>
  <tr>
   <td>{{RFC("7231", "Accept-Encoding", "5.3.4")}}</td>
   <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Context</td>
  </tr>
 </tbody>
</table>

<h2 id="浏览器兼容性">浏览器兼容性</h2>

<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>

<p>{{Compat("http.headers.Accept-Encoding")}}</p>

<h2 id="相关内容">相关内容</h2>

<ul>
 <li>HTTP <a href="/en-US/docs/Web/HTTP/Content_negotiation">内容协商</a></li>
 <li>包含有内容协商结果的响应头: {{HTTPHeader("Content-Encoding")}}</li>
 <li>其他相似的请求头:{{HTTPHeader("TE")}}, {{HTTPHeader("Accept")}}, {{HTTPHeader("Accept-Charset")}}, {{HTTPHeader("Accept-Language")}}</li>
</ul>

<div id="icibaCirclePointer" style="position: absolute; top: 233px; left: 15px;"></div>

<div id="icibaCirclePointer" style="position: absolute; top: 233px; left: 15px;"></div>