📜  HTTP 标头 |内容编码(1)

📅  最后修改于: 2023-12-03 15:01:19.726000             🧑  作者: Mango

HTTP 标头 | 内容编码

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',因此响应正文不会进行压缩。