Open sakila1012 opened 6 years ago
为了展现良好的 HTTP 知识,重点介绍三个状态码:304 协商缓存,101 协议升级,307 hsts 跳转
浏览器缓存分为强缓存和协商缓存,优先读取强制缓存
强制缓存分为 expires 和 cache-control,而 expires 是一个特定的时间,是比较旧的标准和 cache-control,通常是一个具体的时间长度,比较新,优先级也比较高。
而协商缓存包括 ETag 和 last-modified,last-modified的设置标准是资源上的上次修改时间,而 ETag 是为了应对资源修改时间可能会频繁的情况出现的,是基于资源的内容计算的值,因此优先级也较高。
协商缓存与强制缓存的区别在于强制缓存不需要访问浏览器,返回的结果是 200,协商缓存需要访问服务器,返回的结果是 304.
主要用于 websocket,也可以用于 http2 的升级
HTTP2 优点:支持单个链接多次请求,二进制,压缩头部,服务器推送等
http、https、http2 以及它的 spdy 有什么区别,有分别有什么优缺点
原理:用于 post 请求的跳转去新的 post 请求,但也用于 hsts 跳转。
hsts 全称 HTTP 严格传输安全(HTTP strict Transport Secuirty,缩写 HSTS),功能是要求浏览器下次访问该站点时使用 hsts 来访问,儿不在需要先是 http 在转 HTTPS。这样可以避免 SSL 剥离攻击,即攻击者在用户使用 http 访问的过程中进行攻击,对服务器冒充自己是用户,在攻击者和服务器中使用 https 访问,在用户和服务器中使用 http 访问。
具体使用方法:在服务器响应头中添加 Strict-Transport-Secuirty,可以设置 max-age
写在最前面
之前遇到很多次关于浏览器缓存和 304 的问题,但在开发的过程中没有深究,之前在开发的过程中,使用angularjs开发后台管理,在 IE 浏览器容易出现 304 问题,代码更新了,但页面仍然是之前内容,打开调试,发现是 304。
浏览器缓存机制
缓存对 web 有很重要的作用。 先来个简单的示意图
判断浏览器缓存:1、当前缓存是否过期?2、服务器中的文件是否改动
第一步 判断当前缓存是否过期
第二步 判断服务器中文件是否改动
浏览器缓存
浏览器缓存分为强缓存和协商缓存。当客户请求某个资源时,获取缓存的流程如下:
强缓存
Expire:该字段是http1.0 时的规范,值为一个绝对时间的 GMT 格式的时间字符串,代表缓存资源的过期时间 Cache-Control:max-age,该字段是 http1.1 的规范,强缓存利用其 max-age 值来判断缓存资源的最大生命周期,它的值是单位为秒。
协商缓存