1.1 什么是HTTP缓存?
HTTP缓存:当客户端向服务端请求资源时,会先去到浏览器缓存,如果浏览器缓存有需要请求资源的副本,就可以直接从浏览器缓存中提取,而不会去到服务器。
常见的http缓存都只能缓存get方式请求响应的资源,不能处理其他类型的响应。
HTTP缓存都是从第二次请求开始的,当第一次请求资源时,服务器会返回资源,并在请求头中传回资源的缓存参数;第二次请求时,浏览器会对这些参数进行判断,命中强缓存的就返回200,不命中会把请求参数加到请求头中传给服务器,判断是否命中协商缓存,命中协商缓存返回304(简单点来说就是服务端已经执行了GET,但文件未发生变化),否则服务器会返回新的资源。
而HTTP缓存分为强缓存和协商缓存。强缓存如果生效,不需要再和服务器发生交互,而协商缓存不管是否生效,都需要与服务端发生交互。
1.1.1 强缓存
强缓存在缓存数据未失效的情况下(即Cache-Control的max-age没有过期或者Expires的缓存时间没有过期),那么就会直接使用浏览器的缓存数据,不会再向服务器发送任何请求。强制缓存生效时,http状态码为200。这个方式页面加载的速度很快,性能好,但是在这期间,如果服务端的资源修改了,页面上是无法获取的,因为它不会再向服务器发送请求了。就好比如我们在实际开发中,修改了某个页面的样式,在页面上刷新但修改的内容没有生效,因为使用的是强缓存,这时候就需要Ctrl+F5。
header属性:
-
Pragma(HTTP/1.0)
-
no-cache:不直接使用缓存,根据新鲜度来使用缓存,
响应头不支持这个属性,优先级最高,但在HTTP/1.1废弃了
-
-
Cache-Control(HTTP/1.1)
-
no-cache:不直接使用缓存,根据新鲜度来使用缓存
-
no-store:不使用缓存,每次都是请求下载新资源
-
max-age:缓存时长
-
public/private:是否只能被
-