http缓存
http状态码
1xx: 代表请求已被接受,需要继续处理。
2xx: 表示成功。
3xx: 表示重定向。
4xx: 表示请求错误。
5xx: 表示服务器错误。
常用状态码
200 请求已成功,数据已返回。
301 请求的资源已被永久移动到新的URI。
302 资源临时移动。
304 资源已缓存。
400 客户端请求的语法错误,服务器无法理解。
401 请求要求用户的身份认证。
403 服务器拒绝请求。
404 服务器找不到资源。
500 服务器内部错误。
502 网关错误。
缓存的优点
- 使网页的加载和呈现速度更快。
- 由于减少了不必要的数据传输,因而可以节省网络流量和宽带。
- 在上一步的基础上,可以减少服务器的负担。
缓存策略分类
强缓存
在浏览器中,强缓存分为Expires(http1.0规范)、cache-control(http1.1规范)两种。
协商缓存
协商缓存(也叫对比缓存)是由服务器来确定资源是否可用,这将涉及到两组字段成对出现的,在浏览器第一次发出请求时会带上字段(Last-Modified或者Etag),则后续请求则会带上对于的请求字段(if-modified-since或者if-none-Match),若响应头没有Last-Modified或者Etag,则请求头也不会有对应的字段
缓存流程图
缓存和浏览器操作
- 当前用户使用Ctrl_F5 快捷强制刷新网页时,浏览器会直接从服务器加载信息,跳过强缓存和协商缓存。
- 当前用户仅仅使用F5快捷刷新网页时,浏览器的加载过程会跳过强缓存,但是仍然会进行协商缓存。
| 浏览器相关操作 | Expires/Cache-Control | Last-Modified/etag |
|---|---|---|
| 地址栏中按回车键 | 有效 | 有效 |
| 页面跳转 | 有效 | 有效 |
| 新开窗口 | 有效 | 有效 |
| 浏览器前进、后退 | 有效 | 有效 |
| 浏览器刷新 | 无效 | 有效 |
| 强制刷新 | 无效 | 无效 |
etag的不适用场景
负载均衡方式调用HTTP请求时,同一个客户端对同一个页面的多次请求很可能被分配到不同的服务器来相应,而根据etag的计算原理,不同的服务器有可能在资源内容没有变化的情况下,计算出不一样的etag,而使缓存失效。