对HTTP和HTTPS的一些认识

HTTP(HyperText Transfer Protocol,超文本传输协议):是客户端浏览器或其他程序与Web服务器之间的应用层通信协议 。
HTTPS (HyperText Transfer Protocol over Secure Socket Layer):可以理解为HTTP+SSL/TLS, 比HTTP多了加密的步骤,用于安全的 HTTP 数据传输。

HTTP版本演变:

http协议有三个比较重大的版本:1.0,1.1和2.0,其中1.1也称为1.X版本。

HTTP1.0最早在网页中使用是在1996年,那个时候只是使用一些较为简单的网页上和网络请求上,HTTP1.1则在1999年才开始广泛应用于现在的各大浏览器网络请求中,而HTTP 2.0在2013年8月进行首次合作共事。

HTTP1.1和HTTP1.0相比的变化

  1. 缓存处理,在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。

  2. 带宽优化及网络连接的使用,HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。

  3. 错误通知的管理,在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。

  4. Host头处理,在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。

  5. 长连接,HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。

HTTP2.0和HTTP1.X相比的变化

  1. 新的二进制格式(Binary Format),HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。

  2. 多路复用(MultiPlexing),即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。

  3. header压缩,如上文中所言,对前面提到过HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。

  4. 服务端推送(server push),同SPDY一样,HTTP2.0也具有server push功能。

HTTP和HTTPS的不同点:

  1. HTTP网站url以http://开头,而HTTPS网站的url以https://开头。
  2. HTTP通信协议一般使用tcp的80端口,https一般使用tcp的443端口。
  3. HTTP直接和TCP通信,而HTTPS是和SSL/TLS通信,而SSL/TLS又和TCP进行通信,如下图;
  4. HTTPS协议要用到CA证书来保证密钥的合法性,HTTP不用。证书要由权威机构颁发,功能越强大费用越高,当然也有免费的,很少。
  5. HTTP是明文传输,而HTTPS传输的内容经过了SSL/TLS的处理,是加密的信息。
    (加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。)

关于SSL/TLS:

SSL(Secure Socket Layer),TLS(Transport Layer Security)
TLS是SSL的标准化后的产物,由于习惯问题,虽然现在都是使用TLS,但一直统称为TLS/SSL。

几种加密方案:

对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等;

非对称加密:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。

哈希算法:将任意长度的信息转换为较短的固定长度的值,通常其长度要比信息小得多,且算法不可逆。可用于检查信息是否被篡改,保存密码等。例如:MD5、SHA-1、SHA-2、SHA-256 等。

数字签名:它不是加密算法,是个常用的加密场景。签名就是在信息的后面再加上一段内容(信息经过hash后的值),可以证明信息没有被修改过。hash值一般都会加密后(也就是签名)再和信息一起发送,以保证这个hash值不被修改。

https通信流程

  1. 当浏览器向服务器请求一个安全的网页(通常是 https://) 时,服务器就把它的数字证书和公匙发送给浏览器。
  2. 浏览器检查证书是不是由可以信赖的机构颁发的,检查证书的数字签名是不是正确,确认证书有效和此证书是此属于指定网站的。
    具体检查步骤如下:

(1)首先浏览器读取证书中的证书所有者、有效期等信息进行一一校验
(2)浏览器开始查找操作系统中已内置的受信任的证书发布机构CA,与服务器发来的证书中的颁发者CA比对,用于校验证书是否为合法机构颁发
(3)如果找不到,浏览器就会报错,说明服务器发来的证书是不可信任的。
(4)如果找到,那么浏览器就会从操作系统中取出 颁发者CA 的公钥,然后对服务器发来的证书里面的签名进行解密
(5)浏览器使用相同的hash算法计算出服务器发来的证书的hash值,将这个计算的hash值与证书中签名做对比
(6)对比结果一致,则证明服务器发来的证书合法,没有被冒充
(7)此时浏览器就可以读取证书中的公钥,用于后续加密了

  1. 浏览器使用证书中提供的公钥加密一个随机生成对称密钥,并用此对称密钥对http协议请求内容进行加密,加密后的信息一起发送到服务器。
  2. 服务器用自己的私匙解密浏览器发送过来的对称钥匙,然后用这把对称加密的钥匙解密加密过的http协议请求内容。
  3. 服务器用对称钥匙对http协议响应内容进行加密,并发送给浏览器,浏览器通过对称密钥解密加密信息,获得http协议的响应内容。

即Https通信,同时涉及了对称加密和非对称加密。其中浏览器请求内容和服务器响应内容是经过对称加密的,而对称加密所用的密钥是经过非对称加密的。

参考:
https://www.jianshu.com/p/be29d679cbff

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值