首先我们来解释一下HTTP协议的功能和工作原理
HTTP(超文本传输协议)
它是基于TCP / IP 协议的应用层传输协议,简单来说就是客户端和服务端进行数据传输的一种规则。HTTP底层协议是TCP协议.
HTTP工作原理
HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。
HTTP 用 TCP要实现的两个基本功能:
- 发数据;
- 收数据。
- HTTP不关心其他的细节问题。
HTTP的任务:
- 请求资源(从对方服务器将资源拿到);
- 提交信息(处理数据),从客户端把数据推送到服务器。
HTTP 请求 / 响应的步骤
1.客户端连接到Web服务器
一个HTTP客户端,通常是浏览器,与Web服务器的HTTP
端口(默认为80)建立一个TCP套接字连接。例如,
http://www.oakcms.cn
2、发送HTTP请求
报文结构:
- request:请求行(方法 + url + 协议)请求头部、请求正文
- response:状态行(状态码 + 原因+ 协议)响应头部、响应正文
通过TCP套接字,客户端向Web服务器发送一个文本的请
求报文,一个请求报文由请求行、请求头部、空行和请求
数据4部分组成。
如下图所示:
- Host :请求的资源在哪个主机的端口上
- Connection:该请求支持长连接(heep_alive)
- Content-Length:正文内容长度
- Content-Type:数据类型
- User-Agent:声明用户的操作系统和浏览器版本信息
- Accent:发起了请求
- Referer:当前页面是从哪个页面跳转过来的
- Accept-Encoding:接受的编码
- Accept-Language:接受的语言类型
- Cookie:用于在客户端存储少量信息,通常用于实现会话(session)功能
3、服务器接受请求并返回HTTP响应
- Web服务器解析请求,定位请求资源。服务器将资源复本
写到TCP套接字,由客户端读取。一个响应由状态行、响
应头部、空行和响应数据4部分组成。
HTTP响应:
- GET:获取资源
- POST:传输实体主体
- PUT:传输文件
- HEAD:获得报文首部(相当于GET方法获得的资源去掉正文)
- DELETE:删除文件
- OPTIONS:询问支持的方法(客户端问服务器)
- TRACE:追踪路径
- OCONNECT:要求用隧道协议连接代理
- LINK:建立与资源之间的联系
- UNLINE:断开连接关系
GET 方法和 POST 方法核心点:
- 传参的数据量不一样,一个通过 url,一个通过正文,所以 POST 能传更多的数据;
- GET 方法和 POST 方法传参位置上,可靠性问题。
4、释放连接TCP连接
- 若connection 模式为close,则服务器主动关闭TCP连接,
客户端被动关闭连接,释放TCP连接;若connection 模式为
keepalive,则该连接会保持一段时间,在该时间内可以继
续接收请求;
5、客户端浏览器解析HTML内容
- 客户端浏览器首先解析状态行,查看表明请求是否成功的
状态代码。然后解析每一个响应头,响应头告知以下为若
干字节的HTML文档和文档的字符集。客户端浏览器读取响
应数据HTML,根据HTML的语法对其进行格式化,并在浏
览器窗口中显示。
比较HTTP与HTTPS 特定比较:
HTTP特点:
- 无状态:协议对客户端没有状态存储,比如访问一个网站需要反复进行登录操作
- 无连接:HTTP/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。
比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是
否已经响应过用户的请求,所以每次需要重新响应请求,需要耗费时
间和流量。
- 基于请求和响应:基本的特性,由客户端发起请求,服务端响应
- 通信使用明文、请求和响应不会对通信方进行确认、无法保护数据的完整性,网络完全性极差,后面的HTTPS弥补了这个缺点。
HTTPS特点:
HTTPS和HTTP通信协议发送报文的区别
1. 传统的HTTP协议通信:
传统的HTTP报文是直接将报文信息传输到TCP然后TCP再通过TCP套接字发送给目的主机上。2. HTTPS协议通信:
HTTPS是HTTP报文直接将报文信息传输给SSL套接字进行加密,SSL加密后将加密后的报文发送给TCP套接字,然后TCP套接字再将加密后的报文发送给目的主机,目的主机将通过TCP套接字获取加密后的报文给SSL套接字,SSL解密后交给对应进程。
- 3. 加入了很多密码学中的协议
- 基于HTTP协议,通过SSL或TLS提供加密处理数据、验证对方身份以及数据完整性保护
HTTP与HTTPS安全性比较
HTTPS: 采用 对称加密 和 非对称加密 结合的方式来保护浏览器和服务端之间的通信安全。
HTTPS (security) = 对称加密算法加密数据 + 非对称加密算法交换密钥 + 数字证书验证身份
HTTPS加密具体过程
- ① 验证身份:
客户端向服务端发起握手请求,以明文传输请求信息,包含版本信息,加密-套件候选列表,压缩算法候选列表,随机数,扩展字段等信息。
服务端发送证书 [这套证书就是一对公私钥对(PK,SK)] ,给客户端
客户端检查证书,确认是否由可信任CA机构签发,获取服务端公钥。 如果不是,由用户决定是否继续通讯;如果检查无误或用户选择继续,则客户端认可服务端的身份.
服务端要求客户端发送证书,并检查是否通过验证。失败则关闭连接,认证成功则从客户端证书中获得客户端公钥(PK)
至此,服务器客户端双方的身份认证结束,双方确保身份都是真实可靠的
-
② 传输加密:抵挡中间人攻击
客户端和服务端在开始传输数据之前,先协商传输过程需要使用的加密算法。 客户端发送协商请求给服务端, 其中包含自己支持的非对称加密的密钥交换算法 (RSA)、数据签名算法 (SHA/MD5)、对称加密算法 (DES)、加密密钥的长度*
服务端收到消息后,选择安全性最高的算法,发还给客户端,完成协商
采用混合加密的方式,对称加密和非对称加密相结合。客户端使用对称加密生成 Key Pairs (pk,sk),对传输数据进行加密,然后使用非对称加密的公钥PK对密钥进行加密,发送给服务端。
服务端收到后使用自己的SK解密得到密钥key,再用密钥key解密密文得到明文。
因此,网上传输的数据时被秘钥加密的密文和用公钥PK加密后的秘钥,即使被劫持抓包,没有私钥SK,无法获得加密明文的秘钥,无法获得明文数据。
数字摘要:
将任意长度消息变成固定长度的短消息,常用的加密算法包括
HASH(SHA256),HMAC(Hmac_SHA256)
- ③ 保护数据完整性:
防止传输的内容被中间人冒充或者篡改