http和https

HTTP

影响HTTP网络请求的两个因素:带宽和延迟

  • 延迟:
    • 浏览器阻塞(HOL blocking):如果请求超过浏览器所支持的最大连接数就会造成阻塞。
    • DNS 查询(DNS Lookup):将域名解析成IP地址靠的就是DNS查询,期间可能会有延迟。
    • 建立连接(Initial connection):HTTP 是基于 TCP 协议的,浏览器最快也要在第三次握手时才能捎带 HTTP 请求报文,达到真正的建立连接,但是这些连接无法复用会导致每次请求都经历三次握手和慢启动。三次握手在高延迟的场景下影响较明显,慢启动则对文件类大请求影响较大。

HTTP1.0 和 HTTP1.1 的区别

缓存处理:

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

带宽优化及网络连接的使用:

HTTP1.1在请求头中引入了range这个字段,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。

错误反馈:

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

Host头处理:

在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。

HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。

长连接:

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

HTTP2.0

多路复用 (Multiplexing):

多路复用允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。

在 HTTP/1.1 协议中浏览器客户端在同一时间,针对同一域名下的请求有一定数量限制。超过限制数目的请求会被阻塞。

二进制分帧

在二进制分帧层中, HTTP/2 会将所有传输的信息分割为更小的消息和帧(frame),并对它们采用二进制格式的编码 ,其中 HTTP1.x 的首部信息会被封装到 HEADER frame,而相应的 Request Body 则封装到 DATA frame 里面。

首部压缩

服务端推送

会针对客户端的一个请求,返回多个响应。例如客户端需要index.html,服务端会将他所依赖的 css、js文件也会返回给他

HTTP不足之处

  • 通信内容使用明文——内容可能被窃听。
  • 不验证通信方的身份——可能遭遇伪装
  • 无法验证报文的完整性——报文有可能遭篡改。

HTTPS

是以安全为目标的HTTP通道,在HTTP下加入SSL/TLS层,HTTPS的安全基础是SSL/TSL,因此加密的详细内容需要SSL/TLS。

区别

SSL(Secure Socket Layer,安全套接字层)

位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。

TLS(Transport Layer Security,传输层安全)

前身是SSL,应用不广泛。

  • 对称加密: 有流式和分组两种,加密解密都使用的同一个密钥。
  • 非对称加密:加密使用的密钥和解密使用的密钥是不相同的,分别称为:公钥、私钥,公钥和算法都是公开的,私钥是保密的。非对称加密算法性能较低,但是安全性超强,由于其加密特性,非对称加密算法能加密的数据长度也是有限的。
  • 哈希算法:将任意长度的信息转换为较短的固定长度的值,通常其长度要比信息小得多,且算法不可逆。
  • 数字签名:签名就是在信息的后面再加上一段内容(信息经过hash后的值),可以证明信息没有被修改过。hash值一般都会加密后(也就是签名)再和信息一起发送,以保证这个hash值不被修改。

常用的加密的算法。

  • 客服端发起请求
  • 服务端响应SSL证书供客户端校验(SSL证书中会有公钥)
  • 校验成功后,客户端会产生一个随机数(其实就是密钥),并用公钥加密,发送给服务端
  • 服务端采用私钥解密后,就可以得到这个密钥
  • 后续的加解密会用这个密钥完成。

即用非对称加密传递密钥,再用这个密钥的对称加密算法传递信息。

HTTP和HTTPS的区别

  • https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

  • http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

  • http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

  • http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

-------------本文结束感谢您的阅读-------------