【HTTP 和 HTTPS详解】2

发布于:2024-10-12 ⋅ 阅读:(8) ⋅ 点赞:(0)

目录

常规请求标头

Cache-Control

Connection

Date

Pragma

Via

Warning

客户端特定标头

From

Referer

User-Agent

X-ATT-DeviceId

X-Wap-Profile

条件标头

If-Match

If-Modified-Since

If-None-Match

If-Range

If-Unmodified-Since

内容标头

Content-Length

Content-MD5

Content-Type

身份验证标头

Authorization

Proxy-Authorization

CORS 标头(跨域源资源共享)

Access-Control-Request-Method

Access-Control-Request-Headers

Origin

自定义标头

Cookie 

Accept

Accept-Charset

Accept-Encoding

Accept-Language

Accept-Datetime

Expect

Forwarded

Host

Max-Forwards

Range

TE

Upgrade

X-Requested-With

DNT

X-Forwarded-For

X-Forwarded-Host

X-Forwarded-Proto

Front-End-Https

X-Http-Method-Override

Proxy-Connection

X-UIDH

X-Csrf-Token

X-Request-ID

X-Correlation-ID

X-Frame-Options

响应标头

通用响应标头

Date

Connection

Via

Warning

实体标头

Allow

Content-Disposition

Content-Encoding

Content-Language

Content-Location

Content-Range

ETag

Expires

Last-Modified

重定向标头

Location

Refresh

Retry-After

安全标头

Strict-Transport-Security

X-Frame-Options

X-Content-Type-Options

X-XSS-Protection

 客户端标头

P3P

Server

Transfer-Encoding

Upgrade-Insecure-Requests

Vary

X-Powered-By

X-UA-Compatible


常规请求标头

通用请求标头为 HTTP 请求提供基本上下文,决定了客户端和服务器之间的数据传输方式。这些标头(例如User-Agent和Accept)告知服务器客户端的功能和偏好,例如它可以处理的内容类型或它使用的浏览器。通过利用通用请求标头,服务器可以定制响应以更好地满足客户端的需求,从而确保更高效、更优化的交互。

Cache-Control

标Cache-Control头用于指定请求和响应中的缓存机制指令。它定义了内容的缓存方式和缓存时长。

它用于控制浏览器和中间缓存如何缓存响应。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Cache-Control': 'no-cache'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

Connection

Connection控制当前事务完成后网络连接是否保持打开状态。其值包括“keep-alive”或“close”。

它用于控制网络连接行为。

可能的值包括:

  • keep-alive:此值要求在事务完成后保持连接打开,以便将来的请求。它有助于减少为每个请求建立新连接的开销,从而提高网络通信效率,尤其是在客户端连续发出多个请求的情况下。
  • close:此值表示当前事务完成后应关闭连接。它有助于确保资源不会被过度占用,这对于处理大量请求的服务器来说非常重要,因为保持许多连接打开可能会导致过度的资源消耗。
  • upgrade:此值用于要求服务器切换到其他协议,例如从 HTTP/1.1 切换到 WebSocket。这在单个连接需要从 HTTP 开始,然后升级到支持双向实时通信的协议的场景中尤其重要。
const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Connection': 'keep-alive'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

Date

Date表示消息发出的日期和时间。服务器可以使用此标头进行记录和验证请求。

它用于指示消息发送的日期和时间。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Date': new Date().toUTCString()
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

Pragma

Pragma标头是一个通用标头,用于与 HTTP/1.0 缓存向后兼容,它允许客户端请求特定的缓存行为。

它用于控制缓存机制。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Pragma': 'no-cache'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

Via

Via用于跟踪请求经过的中介(代理)。它用于调试和跟踪请求路径。

它用于指定请求中涉及的中间代理。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Via': '1.1 proxy1, 1.1 proxy2'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

Warning

Warning携带有关消息状态或转换的附加信息,这些信息可能不会反映在响应状态代码中。

它用于向用户传达警告。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Warning': '199 Miscellaneous warning'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

客户端特定标头

客户端专用标头旨在提供有关客户端环境和要求的详细信息。例如,X-Requested-With和之类的标头X-Client-ID可以指示请求是否来自特定应用程序或为客户端提供唯一标识符。这些标头对于个性化以及实现分析或有针对性的内容等功能至关重要,使服务器能够以针对每个特定客户端进行优化的方式做出响应

From

标头From包含控制请求用户代理的人类用户的 Internet 电子邮件地址。此地址用于记录目的,不应用于未经请求的电子邮件。

它用于指示发出请求的用户的电子邮件地址。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'From': 'user@example.com'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

Referer

Referer指示发出请求的上一个网页的地址。它用于分析和记录目的。

它用于指定引用页面的 URL。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Referer': 'https://example.com/page'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

User-Agent

User-Agent包含一个字符串,用于标识发出请求的用户代理(浏览器、应用程序)。这用于内容协商和分析。

它用于识别发起请求的客户端软件。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

X-ATT-DeviceId

X-ATT-DeviceId标头用于传递 AT&T 设备标识符,通常由 AT&T 用于跟踪和识别目的。

它用于传递 AT&T 设备标识符。

AT&T 设备标识符是分配给连接到 AT&T 网络的每个设备的唯一标识符。它主要用于跟踪、管理和识别设备。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'X-ATT-DeviceId': 'ABC123DEF'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

X-Wap-Profile

X-Wap-Profile标头用于链接到客户端设备的 WAP 配置文件。此配置文件包含设备功能和配置。

它用于指定设备 WAP 配置文件的 URL。

WAP(无线应用协议)配置文件本质上是一组规范,用于描述移动设备访问 WAP 内容的功能和配置。可以将其视为“设备配置文件”,它告诉服务器设备具有哪些功能和限制,以便服务器可以相应地定制内容。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'X-Wap-Profile': 'http://wap.example.com/profiles/ABC123.xml'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

条件标头

条件标头在优化资源使用和确保数据一致性方面发挥着关键作用。标头If-Modified-Since允许ETag客户端仅在资源自上次访问以来发生变化时才请求资源。这有助于最大限度地减少不必要的数据传输和服务器负载,通过利用缓存机制和减少带宽消耗来提高性能并使 Web 体验更高效。

If-Match

If-Match头要求实体标签 (ETag) 与列出的值之一匹配,从而使请求具有条件性。如果所有标签均不匹配,则返回 412 Precondition Failed 响应。

它用于根据 ETag 制定条件请求。

ETag,即“实体标签”,是用于 Web 缓存验证和条件请求的 HTTP 标头。它是一种有助于管理资源状态并提高 Web 交互效率的机制。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'If-Match': 'abc123'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

If-Modified-Since

If-Modified-Since头使请求具有条件性,即仅当资源自指定日期和时间以来被修改时才请求该资源。

它用于根据修改时间来制定条件请求。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'If-Modified-Since': 'Wed, 21 Oct 2015 07:28:00 GMT'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

If-None-Match

If-None-Match头使请求具有条件性,即仅当 ETag 与列出的任何值都不匹配时才请求资源。它通常用于更新缓存数据。

它用于根据 ETag 制定条件请求。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'If-None-Match': 'abc123'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

If-Range

If-Range标头使请求具有条件性,即仅当资源自指定日期或 ETag 以来未被修改时才请求该资源。它通常与范围请求一起使用。

它用于根据 ETag 或修改时间使范围请求有条件。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'If-Range': 'abc123'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

If-Unmodified-Since

If-Unmodified-Since头使请求具有条件性,即仅当资源自指定日期以来未被修改时才请求该资源。它通常用于防止丢失更新。

它用于根据修改时间来制定条件请求。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'If-Unmodified-Since': 'Wed, 21 Oct 2015 07:28:00 GMT'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

内容标头

内容标头对于定义发送或接收的数据的性质和格式至关重要。标头(例如)Content-Type会Content-Length告知接收者内容的类型(例如 JSON、HTML)及其大小,这对于正确处理和呈现数据至关重要。这些标头可确保正确解释和处理数据,从而保持内容在不同平台和设备上的完整性和可用性。

Content-Length

Content-Length标头指示请求正文的大小(以字节为单位)。在 HTTP/1.1 中,任何包含正文的请求都需要此标头。

用于指定请求主体的大小。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Content-Length': Buffer.byteLength(postData)
  },
  body: postData
};
request.post(options, (error, response, body) => {
  console.log(body);
});

Content-MD5

Content-MD5头提供了请求主体的 MD5 哈希值,通过允许接收者验证主体未被更改来确保内容的完整性和真实性。

用于验证消息主体的完整性。

const crypto = require('crypto');
const postData = JSON.stringify({ key: 'value' });
const md5 = crypto.createHash('md5').update(postData).digest('base64');
const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Content-MD5': md5
  },
  body: postData
};
request.post(options, (error, response, body) => {
  console.log(body);
});

Content-Type

Content-Type头指示资源的媒体类型或在 HTTP 请求正文中发送的数据。常见值包括application/json和text/html。

用于指定请求体的媒体类型。

const postData = JSON.stringify({ key: 'value' });
const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Content-Type': 'application/json'
  },
  body: postData
};
request.post(options, (error, response, body) => {
  console.log(body);
});

身份验证标头

身份验证标头对于确保客户端和服务器之间的交互至关重要。标头有助于Authorization交换WWW-Authenticate凭据,确保只有授权用户才能访问受保护的资源。这一层安全性对于保护敏感信息以及维护 Web 应用程序和服务中用户数据的隐私和完整性至关重要。

Authorization

Authorization标头用于发送凭证,以便向服务器验证用户代理的身份。此标头通常包括令牌、密码或其他形式的身份验证。

它用于传递身份验证信息。
 

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Authorization': 'Bearer your_token_here'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

Proxy-Authorization

Proxy-Authorization标头用于将凭据发送到代理服务器,允许客户端向代理进行身份验证。

它用于将身份验证信息传递给代理。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Proxy-Authorization': 'Basic ' + Buffer.from('username:password').toString('base64')
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

CORS 标头(跨域源资源共享)

CORS 标头管理如何在不同来源之间共享资源,通过精细控制处理跨来源请求。标头(例如Access-Control-Allow-Origin和)Access-Control-Allow-Methods用于指定哪些域可以访问资源以及允许哪些 HTTP 方法。此机制对于实现托管在不同域上的 Web 应用程序之间的安全且受控的交互至关重要,可防止未经授权的访问,同时促进必要的集成。

Access-Control-Request-Method

Access-Control-Request-Method标头用于 CORS 预检请求,以便让服务器知道在实际发出请求时将使用哪种 HTTP 方法。

它用于指定 CORS 请求的方法。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Access-Control-Request-Method': 'POST'
  }
};
request.options(options, (error, response, body) => {
  console.log(body);
});

Access-Control-Request-Headers

Access-Control-Request-Headers标头用于 CORS 预检请求,以指示在实际请求时将使用哪些 HTTP 标头。

它用于指定 CORS 请求的标头。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Access-Control-Request-Headers': 'Content-Type'
  }
};
request.options(options, (error, response, body) => {
  console.log(body);
});

Origin

Origin头指示请求的来源(方案、主机和端口)。服务器使用它来确定是否允许请求,尤其是在 CORS 请求中。

它用于指定请求的来源。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Origin': 'https://example.com'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

自定义标头

Cookie 

Cookie头用于从客户端向服务器发送 Cookie。Cookie 通常用于会话管理、跟踪和个性化用户体验。

它用于将 cookie 传递给服务器。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Cookie': 'sessionId=abc123; token=xyz789'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

Accept

Accept头告知服务器客户端可以处理的媒体类型,例如 HTML、JSON、XML 等。这有助于服务器以客户端理解的格式发送响应。

它用于指定响应可接受的媒体类型。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Accept': 'application/json'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

Accept-Charset

Accept-Charset指示客户端能够理解的字符集。这有助于确保内容被正确编码。

它用于指定响应的首选字符集。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Accept-Charset': 'utf-8'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

Accept-Encoding

Accept-Encoding头会通告客户端可以理解哪种内容编码,例如 gzip、deflate 或 br。这允许服务器发送压缩内容。

它用于指定可接受的内容编码方法。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Accept-Encoding': 'gzip, deflate'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

Accept-Language

Accept-Language头用于指定响应的首选语言。这对于以用户首选语言提供内容特别有用。

它用于指定响应的首选语言。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Accept-Language': 'en-US,en;q=0.9'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

Accept-Datetime

Accept-Datetime头用于请求资源的特定版本,因为它在特定的时间点存在。

它用于根据日期时间请求资源的特定版本。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Accept-Datetime': 'Wed, 21 Oct 2015 07:28:00 GMT'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

Expect

Expect头用于指示客户端需要特定的服务器行为。例如,它可用于100-continue在发送较大的正文之前请求响应。

它用于指定服务器必须满足的期望。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Expect': '100-continue'
  }
};
request.post(options, (error, response, body) => {
  console.log(body);
});

Forwarded

Forwarded头用于披露请求中涉及的客户端和代理服务器的信息。它标准化了这些详细信息的格式。

它用于传递原始客户端和代理链的详细信息。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Forwarded': 'for=192.0.2.60;proto=http;by=203.0.113.43'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

Host

Host头指定服务器的域名和服务器正在侦听的 TCP 端口号。它在 HTTP/1.1 请求中是必需的。

用于指定服务器的域名和端口。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Host': 'api.example.com'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

Max-Forwards

Max-Forwards头提供了一种使用 TRACE 和 OPTIONS 方法的机制,以限制代理转发请求的次数。

用于限制转发请求的次数。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Max-Forwards': '10'
  }
};
request.options(options, (error, response, body) => {
  console.log(body);
});

Range

Range头用于从资源请求特定范围的字节。它通常用于恢复中断的下载或流媒体。

它用于指定从资源中获取的字节范围。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Range': 'bytes=0-1023'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

TE

TE指示客户端愿意接受的传输编码,例如 Chunked。它用于指定可接受的传输编码。

它用于指定客户端可以处理的传输编码。

类型有:

  • chunked:此值表示响应将作为一系列块传输。它允许服务器在知道总内容大小之前开始发送响应。每个块都以十六进制格式的块大小开头,后跟块本身和换行符。消息的结尾以大小为零的最终块标记。
  • compress:此值使用 UNIX “compress” 程序来压缩响应数据。但是,与更现代的算法相比,它效率低下且缺乏灵活性,因此目前不太常用,并且并非所有浏览器都支持它。
  • deflate:此值表示使用 zlib 结构的压缩格式,使用 DEFLATE 压缩算法压缩数据。它比compress现代浏览器更高效,并且受到广泛支持。
  • gzip:此值表示将使用 GZIP 文件格式压缩数据。gzip是网络上最常用的压缩方法之一,因为它在压缩率和速度之间提供了良好的平衡。
  • 标识:此值表示未对实体主体应用任何编码。它本质上是一种明确说明发送的是原始、未编码数据的方式。如果不Transfer-Encoding存在标头,则这是默认编码。
const options = {
  url: 'https://api.example.com/data',
  headers: {
    'TE': 'chunked'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

Upgrade

Upgrade标头用于请求服务器切换协议,例如从 HTTP/1.1 切换到 WebSocket。

它用于请求升级到不同的协议。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Upgrade': 'websocket'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

X-Requested-With

X-Requested-With标头通常用于标识 Ajax 请求。大多数 JavaScript 框架都会发送该标头,其值为XMLHttpRequest。

它用于表明请求是通过 Ajax 发出的。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'X-Requested-With': 'XMLHttpRequest'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

DNT

DNT用于请求 Web 应用程序禁用其自身跟踪或对单个用户的跨站点用户跟踪。

它用于指示用户的跟踪偏好。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'DNT': '1'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

X-Forwarded-For

X-Forwarded-For标头用于识别通过代理或负载平衡器连接到 Web 服务器的客户端的原始 IP 地址。

用于传递原始客户端的IP地址。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'X-Forwarded-For': '203.0.113.195'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

X-Forwarded-Host

X-Forwarded-Host标头用于在HostHTTP请求标头中指定客户端请求的原始主机。

用于传递客户端请求的原始主机。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'X-Forwarded-Host': 'original.example.com'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

X-Forwarded-Proto

X-Forwarded-Proto头用于指示客户端用于连接代理或负载均衡器的协议(HTTP 或 HTTPS)。

用于传递客户端使用的协议。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'X-Forwarded-Proto': 'https'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

Front-End-Https

Front-End-Https标头由 Microsoft 应用程序用来指示前端正在使用 HTTPS。

用于指定前端使用HTTPS。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Front-End-Https': 'on'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

X-Http-Method-Override

X-Http-Method-Override头用于覆盖 HTTP 方法。当客户端或服务器仅支持 GET 和 POST 方法但应用程序需要使用其他方法(如 PUT 或 DELETE)时,这很有用。

它用于覆盖请求中指定的 HTTP 方法。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'X-Http-Method-Override': 'DELETE'
  }
};
request.post(options, (error, response, body) => {
  console.log(body);
});

Proxy-Connection

Proxy-Connection是一个非标准header,用来控制客户端和代理服务器之间的连接行为,类似于header Connection。

它用于控制代理连接行为。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Proxy-Connection': 'keep-alive'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

X-UIDH

X-UIDHVerizon Wireless 使用该标头在 HTTP 请求中插入唯一标识符标头,通常用于跟踪和广告目的。

它用于传递唯一标识符标头。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'X-UIDH': 'unique_identifier'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

X-Csrf-Token

X-Csrf-Token标头用于确保请求来自可信来源,从而防止跨站点请求伪造 (CSRF) 攻击。

它用于传递 CSRF 令牌以达到安全目的。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'X-Csrf-Token': 'secure_token'
  }
};
request.post(options, (error, response, body) => {
  console.log(body);
});

X-Request-ID

X-Request-ID标头用于唯一标识 HTTP 请求,通常用于跟踪和记录目的。

它用于传递请求的唯一标识符。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'X-Request-ID': 'unique_request_id'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

X-Correlation-ID

X-Correlation-ID头用于关联客户端和服务器之间的 HTTP 请求和响应,常用于分布式系统中的跟踪和调试。

它用于传递关联标识符以用于跟踪目的。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'X-Correlation-ID': 'correlation_id'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

X-Frame-Options

X-Frame-Options头用于控制是否应允许浏览器以<frame>、<iframe>、<embed>或 的形式呈现页面<object>。这有助于防止点击劫持攻击。

用于指定页面是否可以显示在框架中。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'X-Frame-Options': 'DENY'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

响应标头

当服务器响应客户端的请求时,它会发回一个 HTTP 响应,该响应由三个主要部分组成:状态行、响应标头和正文。响应标头是键值对,提供有关服务器响应的其他信息。

可以将响应标头视为随交付的包附带的详细报告。它们传达有关响应的关键信息,例如交付的内容类型、编码格式、安全策略以及需要设置的任何 Cookie。这些标头确保客户端知道如何正确处理和解释传入的数据,从而提高 Web 通信的效率和安全性。

通用响应标头

常规响应标头提供有关服务器响应的基本信息,决定客户端如何解释和处理收到的数据。标头分别提供有关服务器身份和响应时间戳的见解。这些标头可帮助客户端了解响应的上下文ServerDate做出明智的决策,例如何时刷新或重新处理信息。

Date

Date头表示消息发出的日期和时间。服务器可以使用此标头进行记录和验证请求。

它用于指示消息发送的日期和时间。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Date': new Date().toUTCString()
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

Connection

Connection控制当前事务完成后网络连接是否保持打开状态。其值包括“keep-alive”或“close”。

它用于控制网络连接行为。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Connection': 'keep-alive'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

Via

Via头用于跟踪请求经过的中介(代理)。它用于调试和跟踪请求路径。

它用于指定请求中涉及的中间代理。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Via': '1.1 proxy1, 1.1 proxy2'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

Warning

Warning头携带有关消息状态或转换的附加信息,这些信息可能不会反映在响应状态代码中。

它用于向用户传达警告。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Warning': '199 Miscellaneous warning'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

实体标头

Allow

Allow头列出了资源支持的 HTTP 方法集。这用于在响应中指示允许使用哪些方法。

它用于指定资源允许的 HTTP 方法。

const options = {
  url: 'https://api.example.com/resource',
  headers: {
    'Allow': 'GET, POST, PUT'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

Content-Disposition

Content-Disposition提供有关如何显示内容的信息,通常用于指示内容是否应以内联显示或作为附件显示。

它用于指定如何显示或下载内容。

const options = {
  url: 'https://api.example.com/file',
  headers: {
    'Content-Disposition': 'attachment; filename="file.txt"'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

Content-Encoding

Content-Encoding头用于指定已应用于响应主体的编码转换,例如 gzip 或 deflate。

用于指定响应主体的编码。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Content-Encoding': 'gzip'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

Content-Language

Content-Language用于描述响应主体的受众所采用的语言。

用于指定响应内容的语言。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Content-Language': 'en-US'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

Content-Location

Content-Location头用于指定返回数据的备用位置,有助于指示资源的位置。

它用于指定可以找到资源的 URI。

const options = {
  url: 'https://api.example.com/resource',
  headers: {
    'Content-Location': '/alternate/resource'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

Content-Range

Content-Range标头用于指定服务器返回的字节范围,对于恢复下载和处理部分内容请求很有用。

用于指定响应主体的范围。

const options = {
  url: 'https://api.example.com/file',
  headers: {
    'Content-Range': 'bytes 0-1023/2048'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

ETag

ETag头提供所请求变体的实体标签的当前值。此值用于缓存和条件请求。

用于指定资源的ETag。

const options = {
  url: 'https://api.example.com/resource',
  headers: {
    'ETag': '"abc123"'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

Expires

Expires头给出了响应被视为过期的日期和时间。它用于控制缓存。

它用于指定响应的过期时间。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Expires': new Date(Date.now() + 3600 * 1000).toUTCString() // 1 hour from now
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

Last-Modified

Last-Modified头指示资源最后修改的日期和时间。这可用于缓存和条件请求。

用于指定资源的最后修改时间。

const options = {
  url: 'https://api.example.com/resource',
  headers: {
    'Last-Modified': 'Wed, 21 Oct 2015 07:28:00 GMT'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

重定向标头

当请求的资源已移动或需要重定向时,重定向标头用于将客户端引导至不同的 URL。诸如 之类的标头Location和状态代码(例如301 Moved Permanently或 )302 Found会通知客户端新的资源位置。重定向标头对于管理 URL 更改、维护链接完整性以及确保将用户定向到正确的资源或更新的位置至关重要。

Location

Location标头用于将接收者重定向到请求 URL 以外的位置,通常在重定向或资源创建后使用。

它用于指定要重定向到的 URL。

const options = {
  url: 'https://api.example.com/resource',
  headers: {
    'Location': 'https://api.example.com/redirect'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

Refresh

Refresh标头用于指示客户端在指定的秒数后刷新页面。

用于指定客户端的刷新间隔。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Refresh': '5; url=https://api.example.com/refresh'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

Retry-After

Retry-After标头指示用户代理在发出后续请求之前应等待多长时间,用于状态 503(服务不可用)的响应。

它用于指定客户端何时可以重试请求。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Retry-After': '3600' // 1 hour
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

安全标头

安全标头对于增强 Web 应用程序的安全状况至关重要,因为它可以防御常见威胁。Content-Security-Policy、Strict-Transport-Security和等X-Frame-Options标头有助于缓解跨站点脚本 (XSS)、点击劫持和中间人攻击等风险。 实施这些标头可增强 Web 交互的安全性,并保护用户数据和应用程序完整性。

Strict-Transport-Security

Strict-Transport-Security(HSTS) 用于强制与服务器建立安全 (HTTPS) 连接。它可以防止协议降级攻击和 cookie 劫持。

它用于强制执行 HTTPS 连接。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Strict-Transport-Security': 'max-age=31536000; includeSubDomains'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

X-Frame-Options

X-Frame-Options头用于控制是否应允许浏览器以<frame>、<iframe>、<embed>或 的形式呈现页面<object>。这有助于防止点击劫持攻击。

用于指定页面是否可以显示在框架中。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'X-Frame-Options': 'DENY'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

X-Content-Type-Options

X-Content-Type-Options标头用于防止浏览器将文件解释为与Content-Type标头中指定的 MIME 类型不同的 MIME 类型。常见值为nosniff。

它用于防止 MIME 类型嗅探。

MIME 类型(多用途 Internet 邮件扩展类型)是一种标记文件所含数据类型的方法。此标签可帮助互联网浏览器和其他软件了解如何处理和显示文件。例如,MIME 类型image/jpeg表示文件是 JPEG 图像,而text/html表示文件包含 HTML 代码。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'X-Content-Type-Options': 'nosniff'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

X-XSS-Protection

X-XSS-Protection标头用于启用或禁用大多数 Web 浏览器内置的跨站点脚本 (XSS) 过滤器。常见值为1; mode=block。

用于控制浏览器中的XSS防护机制。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'X-XSS-Protection': '1; mode=block'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

 客户端标头

Link提供了一种在 HTTP 标头中序列化一个或多个链接的方法,对于指示分页链接等关系很有用。

它用于在响应中提供关系链接。

链接类型有:

  • prev:指向序列中的前一个文档,常用于分页。
  • next:指向序列中的下一个文档,也常用于分页。
  • first:表示一系列文档中的第一个文档,例如多页文章或搜索结果中的第一个文档。
  • last:表示一系列文档中的最后一个文档。
  • 规范:指内容高度相似的一组资源的首选版本。这对于 SEO 特别有用,可以避免内容重复问题。
  • alternative:指向文档的替代版本,可以是另一种语言、格式或媒体类型。
  • stylesheet:表示要应用于当前文档的样式表。
  • 图标:链接到代表文档的图标。
  • help:指向提供帮助的资源(文档或帮助手册)。
  • license:链接到当前文档所依据的许可证。
  • 作者:指向有关文档作者的信息。
  • search:指示可以进行搜索的资源。
  • hub:与 PubSubHubbub 协议相关使用,链接到允许推送更新的中心。
const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Link': '<https://api.example.com/data?page=2>; rel="next"'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

P3P

P3P是向用户代理提供隐私政策的一种方式。它用于自动应用隐私偏好。

它用于为响应提供隐私政策。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'P3P': 'CP="This is not a P3P policy!"'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

Server

Server包含有关源服务器用于处理请求的软件的信息。这可以包括软件名称和版本等详细信息。

它用于识别服务器软件。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Server': 'Apache/2.4.1 (Unix)'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

Set-Cookie用于将 cookie 从服务器发送到用户代理。然后客户端会在对服务器的后续请求中包含这些 cookie。

它用于在客户端设置cookie。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Set-Cookie': 'sessionId=abc123; Path=/; HttpOnly'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

Transfer-Encoding


Transfer-Encoding指定用于将有效负载主体安全地传输给用户的编码形式。它可以包含如下值chunked。

用于指定传输响应主体所使用的编码。

类型有:

  • chunked:此值表示响应将作为一系列块传输。它允许服务器在知道总内容大小之前开始发送响应。每个块都以十六进制格式的块大小开头,后跟块本身和换行符。消息的结尾以大小为零的最终块标记。
  • compress:此值使用 UNIX “compress” 程序来压缩响应数据。但是,与更现代的算法相比,它效率低下且缺乏灵活性,因此目前不太常用,并且并非所有浏览器都支持它。
  • deflate:此值表示使用 zlib 结构的压缩格式,使用 DEFLATE 压缩算法压缩数据。它比compress现代浏览器更高效,并且受到广泛支持。
  • gzip:此值表示将使用 GZIP 文件格式压缩数据。gzip是网络上最常用的压缩方法之一,因为它在压缩率和速度之间提供了良好的平衡。
  • 标识:此值表示未对实体主体应用任何编码。它本质上是一种明确说明发送的是原始、未编码数据的方式。如果不Transfer-Encoding存在标头,则这是默认编码。
const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Transfer-Encoding': 'chunked'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

Upgrade-Insecure-Requests

Upgrade-Insecure-Requests标头由客户端发送,表明它可以处理同一 URL 的安全(HTTPS)响应,通常用于通过 HTTP 请求 HTTPS 内容。

用于指示客户端支持升级到HTTPS。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Upgrade-Insecure-Requests': '1'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

Vary

Vary标头用于指示响应根据指定请求标头的值而变化。这用于内容协商和缓存。

它用于指定影响响应内容的标头。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'Vary': 'Accept-Encoding'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

X-Powered-By

X-Powered-By指示 Web 服务器使用的技术。它通常用于识别后端技术。

用于表示服务器的技术堆栈。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'X-Powered-By': 'Express'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});

X-UA-Compatible

X-UA-Compatible头用于指定 Internet Explorer 的文档模式。它有助于控制浏览器的行为。

它用于指定 Internet Explorer 的文档模式。

const options = {
  url: 'https://api.example.com/data',
  headers: {
    'X-UA-Compatible': 'IE=edge'
  }
};
request.get(options, (error, response, body) => {
  console.log(body);
});