Skip to content

9.说说 HTTP 常⻅的请求头有哪些? 作⽤是?

HTTP 头是在 HTTP 请求和响应中包含的元数据信息,用于传递关于消息的附加信息。HTTP 协议定义了一些标准的头字段,这些头字段有明确定义的含义和用途。同时 HTTP 头部字段也可以根据需要自定义。

1.内容协商

客户端 Header描述
Accept用于客户端指定其所期望的响应的媒体类型(即内容类型)
Accept- encoding客户端指定所需的编码方式。
Accept- language客户端向服务器传递其首选的自然语言或语言区域设置。
Range用于请求服务器发送部分响应内容而不是完整的资源。
服务端 Header描述
Content-Type用于指定响应体的多媒体类型。
Content- Encoding用于指定响应主体内容的编码方式。
Content- Range用于指定响应主体内容的部分范围。
Content-Length用于指定响应主体内容的字节长度。

2.HTTP 缓存

1).强缓存 Expires/ Cache-Control

服务器会将数据和缓存规则一并返回,缓存规则信息包含在响应 header 中。强制缓存存在有效期,缓存期内不会向服务端发送请求。超过时间后需要去服务端验证是否是最新版本。

cache-control

HTTP/1.1 建议使用 Cache-Control 头(Expires 有时间同步问题),同时设置时Cache-Control优先级更高,而且缓存控制更丰富。

  • public:表示响应可以被共享缓存(如代理服务器)存储。
  • private:表示响应只能被客户端缓存,不应该被共享缓存存储。
  • max-age:指定响应可以被缓存的最长时间,以秒为单位。
  • no-store:表示响应不应被缓存,客户端必须始终从服务器获取最新内容。
  • no-cache:表示客户端必须在使用缓存之前先验证响应的新鲜度。

2).对比缓存 If-Modified-Since / If-None-Match

  • 时间戳是秒级的,因此可能不足以检测非常小的变化。
  • 对于分布式服务器来说,最后修改时间可能不够精确,因为不同服务器可能有不同的时间设置。

3).对比缓存 Last-Modified/Etag

  • ETag 可以表示资源内容的更精确的变化,包括内容的任何更改。
  • 需要服务器生成和维护 ETag 开销大。

绝大多数情况下,采用 ETag(基于最后修改时间和资源长度生成)进行对比缓存是最常见的方式,因为它既减少了计算开销,又提供了足够的准确性。

3.客户端常用 Header

  • User-Agent:用于标识客户端(例如浏览器)的类型和版本。

  • Cookie:用于在客户端和服务器之间传递状态信息。

  • Authorization: 用于传递身份验证信息,以允许访问受保护的资源。

  • origin:浏览器在跨域请求中发送,用于表示请求的来源。

  • referer:指示当前请求的来源页面的 URL

  • host:正在请求的服务器的主机名(域名)和端口号

  • Connection: 用于指示客户端与服务器之间的连接属性,以及如何处理连接。

4.服务端常用 Header

  • Server: 用于标识服务器的软件和版本信息。
  • Date: 用于指定消息的日期和时间。
  • Location: 用于执行重定向,指示客户端应该跳转到的新 URL。
  • Set-Cookie: 用于在客户端上设置和管理会话 cookie。

Released under the MIT License.