关于http请求,一直都不是很明白,此次决定系统的整理一下。
在这以前先先整理一下SSL/TLS的运行机制:
在网络通讯中,有窃听风险、篡改风险、冒充风险,因此SSL/TLS的设计目的就是为了达到:加密传播、检验机制、配备身份证书。服务器
在这实现的过程当中,最常听到的就是3次握手,握手阶段的基本过程就是:
1.客户端向服务器索要并验证公钥;
2.双方协商生成“对话秘钥”;
3.双方采用“对话秘钥”进行加密通讯;网络
他们的具体过程是:编码
他主要包括的信息有加密
客户端支持协议的版本spa
生成一个随机数,用于“对话秘钥”设计
客户端支持加密的方法code
客户端支持压缩的方法token
他主要包括的信息有图片
确认使用协议的版本,须要跟客户端一致。若是不一致,致使服务器关闭加密通道hash
生成一个随机数,用于“对话秘钥”
确认加密的方法(须要跟客户端一致)
服务器证书(有可能会多一步,须要客户端提供“客户端证书”,像那些银行的token)
判断服务器证书,若是不是可信机关,或证书的域名和实际域名不一致,或者已通过期,则向访问者提出警告,选择是否继续通讯;若是可靠,则从证书中取出服务器的公钥,而后向服务器发出信息,这些信息包括:
一个随机数,用于服务器公钥加密,防止窃听
编码通知,表示随后的信息都将用上方协定的加密方法和秘钥发送
客户端握手结束通知,也把以前发送的全部内容的hash值,而后传递给服务器
收到了客户端的三个随机数,pre-master key,会生成本次会话所用的“会话秘钥”,而后发送内容
编码改变通知,表示随后的信息都将用来双方商定的加密方法和秘钥发送
服务器握手结束通知,表示服务器的握手阶段已经结束,也发送前面内容全部内容的hash值,用于客户端的校验
握手结束,接下来是客户端和服务端进入加密通讯,就彻底使用普通的Http协议,只不过“会话密钥”加密内容(若是是http的话,没有密钥,这是http和https的区别)
为何要有三个随机数,来生成“会话密钥”
由于SSL协议中的证书是静态的,必须引入一种随机数来保证密钥的随机性。pre master 不信任每一个主机都能产生彻底随机的随机数,可是三个随机数就可能接近每增长一个自由度,随机性也就会增长。
请求中经常使用到的code
400: Bad Request
401 Unauthorized
402
403 Forbidden
404 Not found
500 Internal Server Error501 Not Implemented502 Bad Gateway503 Service Unavailable504 Gateway Timeout505 HTTP version not supported