上海字节跳动一道关于http缓存的面试题

首先这个问题是http的缓存,我答了强缓存和协商缓存。
我说道协商缓存,是会请求到后端服务器,然后对比响应头last-modified或者etag,来决定时候使用缓存。
此时面试官问我,已经请求到后端了,为什么还要再去取缓存,而不是直接使用response,我就没答出来。
网上搜了很多,主要还是都是介绍2种缓存的,并没有提到这个问题,望解答!

阅读 4.5k
5 个回答

我猜你说的 response 指的是 response body?

协商缓存如果命中返回的是 304 啊……只有 header 没有 body。

虽然还是请求了一次服务器,但只需要传输 header 部分就可以了,节省了传输文件本身的开销。

因为 response 里没有呀……本质上缓存就是为了减少传输文件的开销,server 既然返回了缓存还能用,就当然不会在 response 里带上数据呀。

服务器直接通知浏览器调用缓存比response拿到文件返回效率更高,响应更快。减少了传输文件带来的开销。

某些情况下网络开销,可以忽略不计,带着etag这类标记的request, 服务端可以主动判断 response 是否已经到期或者失效, 才 lazy 地进行计算。

相对于每次进行 100% 的计算, 采用协商缓存可以用每次仅仅进行 1% 或者更低的开销,加速用户端体验和整体开销。

再次请求判断缓存是否失效,失效则需要从源站重新获取资源

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