HTTP
影响HTTP网络请求的两个因素:带宽和延迟
- 延迟:
HTTP1.0 和 HTTP1.1 的区别
缓存处理:
在HTTP1.0中主要使用header
里的If-Modified-Since
,Expires
来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag
,If-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协议安全。