HTTP 1.1 的标头主要分为四种,通用标头、实体标头、请求标头、响应标头,现在我们来对这几种标头进行介绍
通用标头HTTP 通用标头之所以这样命名,是因为与其他三个类别不同,它们不是限定于特定种类的消息或者消息组件(请求,响应或消息实体)的。HTTP 通用标头主要用于传达有关消息本身的信息,而不是它所携带的内容。它们提供一般信息并控制如何处理和处理消息。
尽管通用标头不会限定于是请求还是响应报文,但是某些通用标头大部分或全部用于一种特定类型的请求中。也就是说,如果某个通用标头出现在请求报文中,那么大部分通用标头都会显示在该请求报文中。响应报文也是一样的。
先列出来一个清单,讲明我们都需要介绍哪些通用标头
Cache-Control
Connection
Date
Pragma
Trailer
Transfer-Encoding
Upgrade
Via
Warning
Cache-Control
缓存(Cache)是计算机领域里的一个重要概念,是优化系统性能的利器。不仅计算机中的 CPU 为了提高指令执行效率从而选择使用寄存器作为辅助,计算机网络同样存在缓存,下面我们就来介绍一下计算机网络中的缓存。
Cache-Control 是通用标头的指令,它能够管理如何对 HTTP 的请求或者响应使用缓存。
因为计算机网络中是可以有第三者出现的,也就是缓存服务器,这个指令通过影响请求/响应中的缓存服务器从而达到控制缓存的目的;不仅有缓存服务器,还有浏览器内部缓存也会影响链路的缓存。
这个标头中可以出现许多单独的指令,其详细信息可以在 RFC 2616 中找到,即使这是常规标头,某些指令也只能出现在请求或响应中。下表提供了一个 Cache-Control 选项的总结并告诉你如何去使用
请注意,在 Cache-Control 标头中只能出现一个指令,但是在消息中可以出现多个这样的标头。
上面这个表格其实会有四种分类
可缓存性: 它们分别是 no-cache、no-store、private 和 public
缓存有效性时间: 它们分别是 max-age、s-maxage、max-stale、min-fresh
重新验证并重新加载: 它们分别是 must-revalidate 和 proxy-revalidate
其他: 它们分别是 only-if-cached 和 no-transform
分别对表格中的内容进行一下详细介绍
no-cache
no-cache 很容易和 no-store 混淆,一般都会把 no-cache 认为是不缓存,其实不是这样。
使用 no-cache 指令的目的是为了防止从缓存中返回过期的资源,例如下图所示
Cache-Control: no-cache