转载:https://blog.csdn.net/franknotbad/article/details/79399809

第一次请求

image.png

第二次请求

  • 请求之前关闭 Disable cache

image.png

第一情况服务端返回304:

  • 若返回状态码为304 Not Modified 则表明此次请求为条件请求。
  • 在请求头中有两个请求参数:If-Modified-Since 和 If-None-Match,分别对应上次返回响应头中Last-Modified值和ETag值。
  • 只有在客户端缓存了对应资源且该资源的响应头中包含了Last-Modified或ETag的情况下,才可能发送条件请求。。
  • 服务器会读取到这两个请求头中的值,判断出客户端缓存的资源是否是最新的
    • 是,服务器就会返回HTTP/304 Not Modified响应头, 但没有响应体。客户端收到304响应后,就会从本地缓存中读取对应的资源。 所以:当访问资源出现304访问的情况下其实就是先在本地缓存了访问的资源。
    • 否,服务器也就必须返回完整的资源数据。

第二情况服务端返回200:

  • 如果服务器认为客户端缓存的资源已经过期了,那么服务器就会返回HTTP/200 OK响应,响应体就是该资源当前最新的内容。客户端收到200响应后,就会用新的响应体覆盖掉旧的缓存资源。

    是否选择 no cache

  • 是,请求头中的Cache-Control为no-cache,表明不使用缓存,则会直接获取服务器资源

  • 否,有两种情况
    • 1、max-age>0 时直接从游览器缓存中提取
    • 2、max-age<=0 时向服务器发送http请求,该资源是否有修改有的话返回200 ,无的话返回304.

image.png