📅  最后修改于: 2023-12-03 15:01:19.726000             🧑  作者: Mango
HTTP 标头可以方便地传递与HTTP请求和响应相关的信息。内容编码是HTTP标头之一,用于指示响应正文使用的压缩算法。当客户端发送具有相应Header的请求时,服务器会在相应中使用指定的编码对响应正文进行压缩,并通知客户端对其进行解压缩。
以下是常见的HTTP内容编码:
gzip:Gzip是最常见的压缩算法之一,它使用DEFLATE算法进行压缩,可在大多数浏览器中使用。
deflate:Deflate是可以在大多数浏览器中使用的另一种压缩算法。虽然它更快,但在某些情况下,压缩过的响应体将比gzip更大。
br:Brotli是一种新的压缩算法,它可以显著地减少文件大小,但只有较新的浏览器支持它。
可通过设置响应标头's Content-Encoding 来设置内容编码。例如,在Node.js中使用 Gzip 压缩响应正文的示例:
const http = require('http');
const zlib = require('zlib');
http.createServer((req, res) => {
// 数据库读取响应正文
const responseText = 'Hello World!';
// 压缩响应正文
zlib.gzip(responseText, (err, compressed) => {
if (err) throw err;
// 设置响应标头
res.writeHead(200, {
'Content-Type': 'text/plain',
'Content-Encoding': 'gzip'
});
// 发送响应
res.end(compressed);
});
}).listen(8080);
在上述示例中,'Content-Encoding'标头设为'gzip',因此响应正文将进行gzip压缩。
如果客户端支持指定的内容编码,则该内容将自动解压缩。例如,在浏览器中发送 gzip 编码的请求时,响应正文会被自动解压缩。
如果您不希望对响应正文进行压缩,则可以将内容编码的标头设置为'identity'。例如,在Node.js中禁用压缩的示例:
const http = require('http');
http.createServer((req, res) => {
const responseText = 'Hello World!';
// 设置响应标头
res.setHeader('Content-Type', 'text/plain')
res.setHeader('Content-Encoding', 'identity');
// 发送响应
res.end(responseText);
}).listen(8080);
在上述示例中,响应标头中的'Content-Encoding'设置为'identity',因此响应正文不会进行压缩。