Appearance
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 中。强制缓存存在有效期,缓存期内不会向服务端发送请求。超过时间后需要去服务端验证是否是最新版本。
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
:指示当前请求的来源页面的 URLhost
:正在请求的服务器的主机名(域名)和端口号Connection
: 用于指示客户端与服务器之间的连接属性,以及如何处理连接。
4.服务端常用 Header
Server
: 用于标识服务器的软件和版本信息。Date
: 用于指定消息的日期和时间。Location
: 用于执行重定向,指示客户端应该跳转到的新 URL。Set-Cookie
: 用于在客户端上设置和管理会话 cookie。