一:http和https
3、从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路
4、http协议入门
一、HTTP/0.9
默认使用80端口,只有一个get命令,服务器只能回应HTML格式的字符串,服务器发送完毕就关闭TCP连接
二、HTTP/1.0
2.1: 简介
a:任何格式都可以发送;
b:除了get还引入了post和head命令;
c:http请求和回应的格式也变了,除了数据部分,每次通信必须包括头信息
d:其它新增的功能包括状态码、多字符集、多部分发送、权限、缓存、内容编码
2.2: content-type字段
1.0版本规定头信息必须是ASCII编码,后面的数据可以是任何格式。服务器回应的时候必须告诉客服端数据是什么格式,这就是content-type字段的作用
2.3: Content-Encoding字段
Content-Encoding字段说明数据压缩的方法
2.4:缺点
每个TCP连接只能发送一个请求。发送数据完毕,连接就关闭,如果还有请求其它资源,就必须再新建一个连接
使用非标准字段Connection,Connection:keep-alive,要求服务器不要关闭TCP连接,服务器同样回应这个字段,直到主动关闭连接
三、HTTP/1.1
3.1 持久连接
引入持久连接,即TCP连接默认不关闭,可以被多个请求复用,客户端和服务器发现对方一段时间没活动就可以关闭连接。规范的做法是客户端在发送最后一个请求时发送Connection:close。同一域名大多数浏览器允许同时建立6个持久连接
3.2 管道机制
在同一个TCP连接里面,客户端可以同时发送多个请求。允许浏览器同时发出A请求和B请求,服务器按顺序回应
3.3 Content-Length字段
该字段声明本次回应的数据长度,区分数据包是属于哪一个回应的。
3.4 分块传输编码
使用Content-Length字段的条件是服务器发送回应之前,必须知道回应的数据长度
对于一些耗时的动态操作,意味着服务器要等到所有操作完成才能发送数据。更好的处理方法是产生一块数据就发送一块,采用“流模式”取代“缓存模式”。
Transfer-Encoding:chunked
3.5 其它的新增功能
新增了:put、patch、head、options、delete
客户端的请求头信息新增了Host字段,用来指定服务器的域名
3.6 缺点
允许复用TCP连接,但是在同一个TCP连接里,所有的数据通信按次序进行,服务器处理完一个回应,才会进行下一个回应。前面的回应慢,后面的就会有许多请求排队等着,发生“队头阻塞”。
避免的方法:a:减少请求数 ; b:同时多开持久连接
四、SPDY协议
谷歌研发,HTTP/2的基础
五、HTTP/2
下一版本是HTTP/3
5.1 二进制协议
a:http/1.1的头信息是文本(ASCII编码),数据体可以是文本,也可以是二进制。
b:http/2则彻底是一个二进制协议,称为“帧”:头信息帧和数据帧
5.2 多工
复用TCP连接,在一个连接里,客户端和浏览器可以同时发送多个请求或回应,不用按顺序一一回应。这样的双向的、实时的通信,叫做多工。
5.3 数据流
a:数据包不是按顺序发送的,同一个连接里面连续的数据包可能属于不同的回应。
b:HTTP/2将每个请求或回应的所有数据包,称为一个数据流,
c:每个数据流都有独一无二的编号,标记ID区分属于哪个数据流
d:客户端发出的ID一律为奇数,服务器发出的为偶数
e:数据流发送到一半的时候,客户端和服务器都可以发送信号 “RE_STREAM帧”取消这个数据流
f:客户端可以指定数据流的优先级,优先级越高服务器越早回应
5.4 头信息压缩
a:http协议不带状态,每次请求附上所有信息
b:引入头信息压缩机制,使用gzip或compress压缩后发送
c:客户端和服务器同时维护一张头信息表,所有字段存入表,生成一个索引号,只发送索引号
5.5 服务器推送
允许服务器未经请求,主动向客户端发送资源
六:https
1、数据通信
长连接:tcp、udp、websocket
短连接:http、https
http协议运行在TCP之上,明文传输,客户端和服务端都无法验证对方的身份;Https是身披SSL(Secure Socket Layer)外壳的http,运行于TCP之上,是添加了加密和认证机制的HTTP。
2、https的加密
1、HTTPS要使客户端与服务器端的通信过程得到安全保证,必须使用的对称加密算法
2、但是协商对称加密算法的过程,需要使用非对称加密算法来保证安全。
这种加密指的是可以生成一对密钥 (k1, k2)。凡是 k1 加密的数据,k1 自身不能解密,而需要 k2 才能解密;凡是 k2 加密的数据,k2 不能解密,需要 k1 才能解密。这种算法事实上有很多,常用的是 RSA。
特点是私钥加密后的密文,只要是公钥,都可以解密,但是公钥加密后的密文,只有私钥可以解密。私钥只有一个人有,而公钥可以发给所有的人。
3、然而直接使用非对称加密的过程本身也不安全,会有中间人篡改公钥的可能性,所以客户端与服务器不直接使用公钥,而是使用数字证书签发机构颁发的证书来保证非对称加密过程本身的安全。
4、这样通过这些机制协商出一个对称加密算法,就此双方使用该算法进行加密解密。从而解决了客户端与服务器端之间的通信安全问题。