网络

HTTP和HTTPS

2022-03-11  本文已影响0人  漆先生

参考连接:
http://events.jianshu.io/p/cd70b8e90d00
https://www.cnblogs.com/ranyonsue/p/8918908.html
https://blog.csdn.net/seujava_er/article/details/90018326
https://www.cnblogs.com/liyuhui-Z/p/7844880.html

一、HTTP版本

1.0版本

1.1版本

2.0版本

3.0版本

二、HTTP缓存机制

1.强缓存

游览器不会发送请求给服务器。利用http的返回头中的Expires或者Cache-Control两个字段来控制的,用来表示资源的缓存时间。Cache-Control的优先级比Expires高。

Expires

缓存过期时间,用来指定资源到期的时间,是服务器端的具体的时间点。当客户端本地时间被修改以后,服务器与客户端时间偏差变大以后,就会导致缓存混乱。

Cache-Control

Cache-Control是一个相对时间,Cache-Control:max-age指定,由于是相对时间,且都是和客户端时间比较,客户端和服务器有时间偏差也不会导致问题。

2.协商缓存

游览器发送请求给服务器。根据http头信息中的Last-Modify/If-Modify-Since或Etag/If-None-Match来判断是否命中协商缓存。如果命中,则http返回码为304,浏览器从缓存中加载资源。

Last-Modify/If-Modify-Since

服务器返回的header中会加上Last-Modify,Last-modify是一个时间标识该资源的最后修改时间,再次发起请求时,发送的请求头中会包含If-Modify-Since,该值是之前返回的Last-Modify。服务器收到If-Modify-Since后,根据资源最后修改时间判断是否命中缓存。问题是,有时候通过最后修改时间来判断资源是否修改还是不太准确,资源变化了最后修改时间也可以一致。

ETag/If-None-Match

与Last-Modify/If-Modify-Since不同的是,Etag/If-None-Match返回的是一个校验码(ETag: entity tag)。ETag可以保证每一个资源是唯一的,资源变化都会导致ETag变化。ETag值的变更则说明资源状态已经被修改。服务器根据浏览器上发送的If-None-Match值来判断是否命中缓存。

有Last-Modified为何还要ETag
  1. Last-Modified标注的最后修改只能精确到秒级,如果某些文件在1秒钟以内,被修改多次的话,它将不能准确标注文件的修改时间

  2. 如果某些文件会被定期生成,当有时内容并没有任何变化,但Last-Modified却改变了,导致文件没法使用缓存

  3. 有可能存在服务器没有准确获取文件修改时间,或者与代理服务器时间不一致等情形

3.总结

三、HTTPS

HTTPS是一种应用层协议,本质上来说它是HTTP协议的一种变种。HTTPS比HTTP协议安全,因为HTTP是明文传输,而HTTPS是加密传输,加密过程中使用了三种加密手段,分别是证书,对称加密和非对称加密。HTTPS相比于HTTP多了一层SSL/TSL,其构造如下:


image.png

四、HTTPS的连接建立流程

  1. 客户端发送请求,包含客户端支持的加密协议及版本,SSL、TLS
  2. 服务器返回协商的加密协议
  3. 服务器返回证书,计算证书摘要,并用私钥加密,跟证书一起发给客户端
  4. 客户端验证证书有效性,客户端用公钥解密证书,并计算摘要,与收到的摘要进行对比
  5. 客户端生成一个随机对称秘钥,用证书中的公钥加密,用Hash算法计算握手信息,使用对称秘钥进行加密,发送到服务器
  6. 服务端用私钥解密,得到客户端的对称秘钥,用对称秘钥解密握手信息,验证Hash值是否一致,使用对称秘钥加密握手信息发送给客户端
  7. 客户端解密并验证握手信息Hash正确,握手结束
上一篇下一篇

猜你喜欢

热点阅读