HTTPS原理——计算机网络原理
HTTP(Hyper Text Transfer Protocol)
超文本传输协议。
HTTP协议格式
这个报文中的空行是为什么呢?
其实为了解决黏包问题。主要原因如下:
(1)因为HTTP协议并没有规定报头部分的键值对有多少个,使用空行就相当于报文的结束标记。
(2)因为TCP协议中面向字节流传输,也是为了解决TCP传输中的黏包问题。
请求格式
这里先说明URL的概念
URL (Uniform Resource Locator 统一资源定位符),互联网上的每个文件都有一个唯一的URL,指出了文件的位置与唯一标识。
GET方法(首行)
用于获取服务器上的某个资源。
GET请求的特点:
- 首行里的第一个部分就是GET
- URL里面的query string可以为空,也可以不为空
- GET请求的body一般是空的
POST方法(首行)
用于提交用户输入的数据给服务器
POST请求的特点:
- 首行里的第一个部分就是POST
- URL里面的query string一般是空的
- GET请求的body一般不为空
GET方法和POST方法是可以相互转化的,因为提交给请求本身就是相互转化的
Q:GET和POST的区别?
A:GET方法和POST方法主要是使用习惯的不同,主要有以下三点:
-
GET方法习惯于通过query string来传输,POST习惯于通过body来传输
-
GET方法习惯于从服务器获取数据,POST方法习惯于客户端给服务器提交数据
-
一般情况下,GET请求的数据会实现成幂等的,而POST则不要求。
(关于幂等的内容,可参考博文)
协议头
整体结构是键值对结构,每个键值占一行,键和值之间使用冒号+空格进行分割。
key | value |
---|---|
HOST | 表示服务器主机的地址和端口 |
Content-Length | 表示body的数据长度 |
Content-Type | 表示body的数据格式 |
User-Agent | 表示浏览器的属性 |
响应格式
状态码
200 OK | 表示访问成功 |
---|---|
404 Not Found | 表示访问资源不存在 |
403 Forbidden | 表示访问被拒绝 |
504 Gateway Timeout | 表示服务器超时 |
HTTPS的诞生
由于HTTP协议并不能保证信息的安全性,因此HTTPS协议出炉
HTTPS(HTTP OVER SSL):SSL(Secure Socket Layer)安全套接字层,工作于传输层与应用层之间,为应用提供数据的加密传输,就是在HTTP传输的基础上增加了SSL协议的加密能力。
SSL的原理:非对称加密(RSA)
将对称加密中的密钥使用非对称加密传输,这样保证了安全性和效率性。
算法的简单介绍:RSA算法
简单来说:就是以下的步骤:
- 甲和乙分别根据RSA生成一对密钥,互相发送公钥
- 甲使用乙的公钥给乙加密信息
- 乙收到信息后,用自己的私钥进行解密
-——但是仅仅如此还不够,很容易通过伪装实现欺骗——
这就产生了数字证书(Certificate Authority):保证交流双方的安全性。
访问一个HTTPS网站的大致流程
浏览器 | 操作 | 服务器 |
---|---|---|
→ | 发送请求,包括协议内容和一个随机数 | |
使用RSA算法把数字证书签名,身份信息发送给浏览器,包括一个随机数 | ← | |
→ | 验证证书的真实性,获得对应公钥,用服务器的公钥发送密钥X给服务器 | |
服务器用私钥解密出信息,得到密钥X | ← |
这部分建议可以再深入学习一下这篇文章: