HTTP请求过程
- 建立TCP连接
- 发送HTTP请求
http的请求报文由三个部分组成:请求行、请求头、请求正文
请求行:主要区分请求报文和响应报文
请求报文的格式是:方法+URL+版本,响应报文的格式:版本+状态码+版本
请求头:包含了一些浏览器的信息,以及环境的信息
请求正文:请求的时候可能需要带上一些数据。 - 服务器响应HTTP请求
- 关闭TCP连接
HTTP1.0 与 HTTP1.1 区别
HTTP1.0
根据上面请求过程,1.0的实现就是每次的HTTP的请求都要进行TCP连接。
每次都需要等待2个时间。
HTTP1.1
http1.1 为了减少每次都要建立TCP连接的问题,引入了TCP保持连接。在这段保持连接的时间内,http不需要再去建立TCP连接,每次可以节约1个时间。
http1.1 的保持连接的方式有两种:
- 非流水线式的,客户在收到一个响应后才会去发下一个请求。
- 流水线式的,客户不会等待响应,会持续发送一连串的请求。
HTTP2.0
有4个新特征:
- 不像以往一样使用文本传输,采用二进制的方式
- 压缩了请求头,以往只有主体会使用GZIP的方式压缩
- 多路复用(详细:https://segmentfault.com/a/1190000011172823#articleHeader2)
- 服务器主动推送
详细介绍:
https://blog.csdn.net/hyugahinat/article/details/50833341
https://www.cnblogs.com/frankyou/p/6145485.html
get 和 post 的区别
GET产生一个TCP数据包;POST产生两个TCP数据包。
1. get请求方式只会发送一次,http header 和data,服务器返回200
2. post方式会发送两次,第一次发送http header,服务器返回 100(继续发送数据),第二次发送 data
详细介绍(https://www.cnblogs.com/logsharing/p/8448446.html)
HTTPS
- 使用HTTPS协议访问,端口一般是443
- 服务端接收到请求
- 返回证书(公钥)
- 客户端得到证书,浏览器会进行验证,如果不可信会提示
证书不可信
,可信则会取出证书中的公钥 - 客户端生成一个随机数,并用公钥加密,返回给服务端。
- 服务端得到公钥加密后的随机数,用私钥进行解密。得到随机数
- 使用随机数进行对称加密传输数据
加密算法
对称加密
key为对称加密的密钥
Y=E(X) ,对明文X加密
D(Y)=D(E(X))=X , 对密文Y进行解密
非对称加密
A持有(A的私钥和B的公钥)
B持有(B的私钥和A的公钥)
A会对明文X使用A私钥进行解密,B公钥进行加密。B接收到的时候会对密文进行B私钥解密,再进行A公钥加密,得到明文。
报文鉴别
散列函数
对报文进行鉴别首先需要有鉴别相关的东西,以MD5为例,MD就是message digeste (报文摘要),使用散列函数可以算出报文X唯一的鉴别码。
接收者接收到鉴别码和拼接的报文。会对报文再次使用散列函数进行运算得到报文摘要,并与发送过来的加密后的报文进行解密,然后再进行比较。就可以知道报文是否被篡改过。