2018.10.27 LOG:cors cache https
这几天先是偏头痛,接着又腰杆痛,上了年龄的程序员真的是伤不起,直到今天才有时间静下来写点东西。
到家附近的骨科医院看病,说是臀上皮神经炎,原因可能是久坐引起的,医生给做了小针刀,那可真是一个舒爽,拿着针在‘臀’上到处居,完事后,貌似好了?其实就是从非常难受变成了难受。
这几天虽然身体不给力,精神其实还是很好滴,看了一些HTTP和HTTPS相关的东西,详情如下。
跨域
现在知道好的跨域方式:代理、JSONP、CORS。
JSONP是老生常谈的东西了,不知道的同学可以谷歌一下,今天主要看看CORS。
CORS是XHR2中才有的东西,但是很好用,解决了包括远程字体在内的很多问题。
在响应头中加入:
- Access-Control-Allow-Origin:定义request来源,*号表示不限制
- Access-Control-Allow-Headers:允许请求的头部信息
- Access-Control-Allow-Methods:定义允许的方法
- Access-Control-Max-Age:生效时间
主要用到的就是以上的头信息,是不是比JSONP方便很多?
缓存
缓存分为客户端缓存和服务器缓存(CDN、redis),这里主要说一下客户端缓存(不包括localstorage)。
Cache-Control
- no-cache:不经过缓存,强制每次直接请求服务器
- no-store:强制任何情况下都不保留缓存副本
- max-age:缓存生效时间
- public:任何途径都可以缓存该资源
- private:主要用来限制用户和代理服务器
校验值
- Last-Modified:资源最后修改时间
- If-Modified-Since:上次服务器发过来的最后修改时间
- Etag:资源在服务器的标识符
- If-None-Match:上次发过来的Etag
配置Last-Modified/ETag的情况下,浏览器再次访问资源,还是会发送请求到服务器询问文件是否已经修改,如果没有,服务器会只发送一个304回给浏览器,告诉浏览器直接从自己本地的缓存取数据;如果修改过那就整个数据重新发给浏览器。
Cache-Control则不同,如果检测到本地的缓存还是有效的时间范围内,浏览器直接使用本地副本,不会发送任何请求。两者一起使用时,Cache-Control的优先级要高于Last-Modified/ETag。即当本地副本根据Cache-Control发现还在有效期内时,则不会再次发送请求去服务器询问修改时间了。
一般情况下,使用Cache-Control会配合Last-Modified/ETag一起使用,因为即使服务器设置缓存时间, 当用户点击“刷新”按钮时,浏览器会忽略缓存继续向服务器发送请求,这时Last-Modified/ETag将能够很好利用304,从而减少响应开销。
HTTPS CA 非对称加密 对称加密
看我能不能解释清楚
为什么后面传输过程要用对称加密?因为速度快呗。
不懂非对称加密的,可以google一下,很多生动的解释。
- HTTP 1 的报文信息是明文传输,很容易被劫取和模仿,就算对传输数据加密也挡不住某些人
- 应用和服务器连接的时候交换密钥,以后互相传送的消息都以定义好的密钥解密,这就是对称加密
- 第一次传送密钥过程很容易泄密,而且如果某一个用户被破解,其他都不安全了
- 将第一次发送密钥的过程改成非对称加密传送
- 浏览器发送连接请求,服务器将公钥送给浏览器,浏览器用服务器的公钥加密‘对称密钥’,发送给服务器
- 因为信息是服务器的公钥加密的,所以只有服务器的私钥才能解密
- 服务器解密后,两端以后就用这个对称密钥来加解密信息。
- 这个还有个漏洞,就是服务器第一次传送公钥给浏览器的时候,很容易被劫持
- 所以需要一个权威机构给服务器颁发的证书来签名这个公钥,再发送给客户端
- 客户端接收到证书和公钥后,用此权威机构的算法解密和生成就能得到公钥
- 这就是HTTPS
- HTTPS常规来说,分为dv-个人,ov-组织,ev-最强,3个等级,等级越高身份安全越好,dv一般是免费的
- 免费推荐:let's encrypt,又拍云,godaddy;收费的推荐:symantec, geotrust,globalsign