前言
HTTP是为万维网设计的一个超文本传输协议,是一个简单的请求——响应、无状态的应用层协议,而HTTPS是以安全为目标的HTTP通道
一、HTTP
超文本传输协议(Hyper Text Transfer Protocol,HTTP)通常是运行在TCP之上,由TCP建立通信,HTTP负责应用层的沟通。
1.HTTP的特点
无状态。服务对客户端没有状态存储,例如登录之后,其后的请求并不会记录登录状态(标准的HTTP协议不包含cookies、session等内容)。在后续的操作中,每次都需要携带客户端的身份认证来完成请求,这样在每次请求中需要做的工作会很多。关于身份认证目前可以使用cookie、session以及设置Authorization等手段解决
基于请求——响应。基本的一个交互状态,客户端请求,服务端响应。
运行在TCP之上。HTTP是应用层协议,是基于TCP协议之上的,而传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。而每次建立一次HTTP通信不断的创建TCP连接开销很大,在这时候,HTTP协议可以设置请求头的Connection:keep-alive,这个属性会帮助客户端同一个TCP连接下发送若干个请求(keep-alive默认timeout=5,max=100,即最多可服务5秒内的100个请求)
在HTTP1.1的通信中是半双工的,HTTP2之后是全双工的
2.HTTP包含的内容
一个HTTP请求通常包含请求行(request line)、请求头(header)、空行和请求数据4部分
- 请求行
请求行主要包含的是请求的方法、请求的内容(即URL)、请求的HTTP协议即版本
例:POST /index/index.html HTTP/2.0 - 请求头
请求头的内容由关键字/值对组成,关键字和值用“:”隔开,每行一对
常见键值对(示例):
关键字 | 值 | 含义 |
---|---|---|
Accept | application/json, text/plain, */* | 客户端接收的类型 |
Authorization | a0dfa104c52c84960888a01904cad323c | HTTP授权的授权证书 |
Cache-Control | no-cache | 指定请求和响应遵循的缓存机制 |
Connection | keep-alive | 是否需要持久连接 |
Cookie | Cookie: SESSIONID=123456; | 保存在请求域名下的Cookie值 |
Content-Length | 136 | 请求的内容长度 |
Content-Type | application/x-www-form-urlencoded | 告知客户端实际返回的内容的类型 |
Host | zhihu-web-analytics.zhihu.com | 请求的服务器的域名和端口号 |
Origin | https://www.zhihu.com | 指定请求的协议和域名 |
User-Agent | Mozilla/5.0 (Linux; X11) | 包含发出请求的用户信息 |
- 空行
最后一个请求头之后是空行,通知服务器以下不再有请求头 - 请求数据
客户端发送给服务器的数据
二、HTTPS
HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的HTTP通道,在HTTP的基础上加入TLS保证传输过程的安全性
1.HTTPS的特点
内容加密:采用混合加密技术,中间者无法直接查看明文内容
验证身份:通过证书认证客户端访问的是自己的服务器
2.HTTPS访问过程
- 首先浏览器访问一个HTTPS的链接,后台接到请求后,就会给客户端发送一个自己的数字证书
- 浏览器收到数字证书后,验证证书的合法性(只有权威机构颁发的数字证书才能通过浏览器的检验)
- 客户端用从证书中得到的公钥将一个随机生成的字符串加密获取密文发送给服务器,服务器用私钥解密,确认没有问题后成功建立通信