sakila1012 / blog

记录自己学习工作中的心得
10 stars 3 forks source link

细说缓存和304 #8

Open sakila1012 opened 6 years ago

sakila1012 commented 6 years ago

写在最前面

之前遇到很多次关于浏览器缓存和 304 的问题,但在开发的过程中没有深究,之前在开发的过程中,使用angularjs开发后台管理,在 IE 浏览器容易出现 304 问题,代码更新了,但页面仍然是之前内容,打开调试,发现是 304。

浏览器缓存机制

缓存对 web 有很重要的作用。 先来个简单的示意图 image

判断浏览器缓存:1、当前缓存是否过期?2、服务器中的文件是否改动

第一步 判断当前缓存是否过期

第二步 判断服务器中文件是否改动

浏览器缓存

image

浏览器缓存分为强缓存和协商缓存。当客户请求某个资源时,获取缓存的流程如下:

强缓存

Expire:该字段是http1.0 时的规范,值为一个绝对时间的 GMT 格式的时间字符串,代表缓存资源的过期时间 Cache-Control:max-age,该字段是 http1.1 的规范,强缓存利用其 max-age 值来判断缓存资源的最大生命周期,它的值是单位为秒。

协商缓存

sakila1012 commented 6 years ago

为了展现良好的 HTTP 知识,重点介绍三个状态码:304 协商缓存,101 协议升级,307 hsts 跳转

304 协商缓存

浏览器缓存分为强缓存和协商缓存,优先读取强制缓存

强制缓存分为 expires 和 cache-control,而 expires 是一个特定的时间,是比较旧的标准和 cache-control,通常是一个具体的时间长度,比较新,优先级也比较高。

而协商缓存包括 ETag 和 last-modified,last-modified的设置标准是资源上的上次修改时间,而 ETag 是为了应对资源修改时间可能会频繁的情况出现的,是基于资源的内容计算的值,因此优先级也较高。

协商缓存与强制缓存的区别在于强制缓存不需要访问浏览器,返回的结果是 200,协商缓存需要访问服务器,返回的结果是 304.

101 协议升级

主要用于 websocket,也可以用于 http2 的升级

HTTP2 优点:支持单个链接多次请求,二进制,压缩头部,服务器推送等

http、https、http2 以及它的 spdy 有什么区别,有分别有什么优缺点

307 hsts 跳转

原理:用于 post 请求的跳转去新的 post 请求,但也用于 hsts 跳转。

hsts 全称 HTTP 严格传输安全(HTTP strict Transport Secuirty,缩写 HSTS),功能是要求浏览器下次访问该站点时使用 hsts 来访问,儿不在需要先是 http 在转 HTTPS。这样可以避免 SSL 剥离攻击,即攻击者在用户使用 http 访问的过程中进行攻击,对服务器冒充自己是用户,在攻击者和服务器中使用 https 访问,在用户和服务器中使用 http 访问。

具体使用方法:在服务器响应头中添加 Strict-Transport-Secuirty,可以设置 max-age

301 和 302 有什么区别?分别适用于什么场景

参考资料

浅谈浏览器http的缓存机制