http缓存控制(对计算机网络知识的复习)------提高并发效率

浏览器缓存分类

  • 浏览器缓存分为强缓存协商缓存
  • 强缓存:不用发请求到服务器就能拿到缓存文件的请求(状态码200 注意:正常请求是200,强缓存也是200)
  • 协商缓存:如果没有命中强缓存,浏览器会将资源加载请求发送到服务器。服务器来判断浏览器本地缓存是否有效。如果可以使用,则服务器并不会返回资源信息,浏览器继续从缓存加载资源。(需要发送请求到服务器,状态码304)
  • 如果没有命中强缓存或者协商缓存,服务器会将完整的资源返回给浏览器,浏览器加载新资源,并更新缓存。(新的请求)

如何判断命中强缓存

  • 在Chrome的开发者工具中看到http的返回码是200,在Size列会显示为(from cache)Status Code:200 OK(from memory cache)
  • 强缓存是利用http的返回头中的Expires或者Cache-Control两个字段来控制的,用来表示资源的缓存时间
  • Expires:缓存过期时间,用来指定资源到期的时间,是服务端的具体的时间点。(服务器告诉浏览器在这个绝对时间以前都可以命中强缓存,都不需要向服务器发送请求)
  • Cache-control:是一个相对时间,代表着资源的有效期。
  • 注意:使用绝对时间的方式有一个明显的缺点----当客户端本地时间被修改以后,服务器与客户端时间偏差变大以后,可能会导致缓存混乱。
  • Cache-Control与Expires可以在服务端配置同时启用或者启用任意一个,同时启用的时候Cache-Control优先级高。
    max-age:指定一个时间长度,在这个时间段内缓存是有效的,单位是s。

强缓存存在的意义

  • 服务器的配置是有限的,设置强缓存能够扩充服务器所提供服务的客户端数量。
  • 利用用户的电脑配置来分担服务器的压力,从而减小服务器的负担。
  • 服务器可以少买几台。

协商缓存(浏览器问服务器我缓存的文件有无更新呀?)

  • 没有更新;浏览器可以用缓存。(状态码304)
  • 有更新;浏览器不能用缓存,服务器需要发新的给浏览器。(状态码200)

Last-Modify/If-Modify-Since(记录的是时间)

  • Last-Modify(响应头里面的 Response Headers):服务器发过来的
  • If-Modify-Since(请求头里面的 Request Headers):浏览器发请求
  • 判断两者是否相等

ETag/If-None-Match(注意:上面记录时间的方式没有那么精确,所以采用ETag/If-None-Match)

  • 返回的是一个校验码,ETag值的变更说明资源状态已经被修改,服务器根据浏览器上发送的If-None-Match值来判断是否命中缓存。(判断两者是否相等,走协商缓存的话应该是相等的。)

总结

(1)http缓存能够帮助服务器提高并发性能,很多资源不需要重复请求直接从浏览器拿缓存
(2)http缓存分类:强缓存和协商缓存
(3)强缓存通过expires和cache-control控制,协商缓存通过last-Modify和E-tag控制
补充:1.为什么有expires还需要cache-control
回答:expires存在服务器和浏览器时间不同步的问题
expires是绝对时间,cache-control是相对时间
2.last-modify和Etag
回答:last-modify它是有时间精度的问题(到秒)
Etag没有精度的问题,只要文件改变,Etag值就会变

猜你喜欢

转载自blog.csdn.net/wennianzhu/article/details/107189024