200 ok (from memory cache) 304 not modified (from memory cache)

clipboard.png
原本以为
200 from memory cache 不访问服务器,直接读缓存,从内存中读取缓存。此时的数据时缓存到内存中的,当kill进程后,数据将不存在
200 from disk cache 不访问服务器,直接读缓存,从磁盘中读取缓存,当kill进程时,数据还是存在。
304 Not Modified 访问服务器,发现数据没有更新,服务器返回此状态码。然后从缓存中读取数据。
后来出现了304 not modified (from memory cache),请求要这么解释啊?

阅读 4.3k
2 个回答

因为你之前访问过一次,已经从disk读入memory了,你再次调用不就from memory cache了。

具体的机制比较复杂,比如有的内容不保存到memory cache,有的不保存到disk cache,但你只要知道这两者是相辅相成的,并不是互斥的,你这个提问的现象就不难理解了。

具体可以去查阅chromium的相关文档。

如果资源已经过期(由 Cache-control 或 Expires 指定的过期时间),浏览器会携带资源的 ETag 等 HTTP 头向服务器发起请求,服务器接到请求后就会根据 ETag 等 HTTP 头检查文件内容是否有改动。如果没有改动,就没必要再返回文件内容,而是返回 304 的状态码,告诉浏览器可以继续使用本地缓存,所以浏览器就再次从本地缓存中读取资源。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题