关于HTTP/HTTPS虽然很熟悉,但是其中原理自认为理解还是不够深入。在网上也看了许多关于HTTP/HTTPS的,这里加上自己理解总结了一下常遇到的问题,顺便巩固一下,方便以后忘记了来查看。
一、HTTP
HTTP(Hypertext Transfer Prtcl)超文本传输协议是基于TCP/IP协议的应用层协议,主要规定了客户端和服务端之间的通信格式,默认80端口(浏览器默认)。
请求报文格式
<method><request-URL><version>
<headers>
<entity-body>
响应报文格式
<version><status><reason-phrase>
<headers>
<entity-body>
这里记录几个请求头
Accept:
指定客户端能接收的内容类型
Accept:text/plain,text/html
Connection:
表示是否需要持久连接 // HTTP 1.1默认进行持久连接
Connection: close
Referer:
先前网页的地址,当前请求网页之前,告诉服务器来源
Cookie:
发送请求时,会把保存在该请求域名下的所有cookie值一起发送给web服务器
Cookie: role=user;ssid=1
HTTP返回状态码
1xx(临时响应)
表示临时响应并需要继续执行操作的状态码。
2xx(成功状态)
表示成功处理了请求的状态码。
3xx(重定向)
表示要完成请求,需要进一步操作。
4xx(请求错误)
这些状态代码表示请求可能出错,客户端请求出错。
5xx(服务器错误)
这些状态代码表示服务器在尝试处理请求时发生内部错误。
二、HTTPS
HTTPS (HyperText Transfer Protocol over Secure Socket Layer)可以理解HTTP+SSL/TLS, 即 HTTP 下加入 SSL 层。
流程:
- 客户端发起 SSL 握手消息给服务端要求连接
- 服务端将证书返回客户端
证书包含:
(1)颁发机构信息
(2)公钥
(3)公司信息
(4)域名
(5)有效期
(6)指纹 - 客户端严重证书是否合法,不合法会提出警告,将是否继续通讯的决定权交给用户选择 ( 注 意,这里将是一个安全缺陷 )。如果检查无误或者用户选择继续,则客户端认可服务端的身份。
- 服务端要求客户端发送证书,并检查是否通过验证。失败则关闭连接,认证成功则从客户端证书中获得客户端的公钥。到此,服务器客户端双方的身份认证结束。
(协商加密算法)
- 客户端发送协商请求给服务端, 其中包含自己支持的非对称加密的密钥交换算法 , 数据签名摘要算法 , 加密传输数据的对称加密算法,以及加密密钥的长度。 服务端接收到消息之后,选中安全性最高的算法,并将选中的算法发送给客户端,完成协商。
- 客户端生成随机的字符串,通过协商好的非对称加密算法,使用服务端的公钥对该字符串进行加密,发送给服务端。
- 服务端通过私钥对随机数解密,对后通过客户端发送的随机数作为密钥形成对称加密算法,对返回结果加密后传输。