HTTP和HTTPS
HTTP:超文本传输协议,明文传输,80端口
超文本:文字、图片、视频、超链接等的混合体(比如HTML)
HTTP状态码
状态码 | 含义 | 例子 |
---|
1xx | 协议处理的中间状态 | | 2xx | 成功 | 200、204 | 3xx | 重定向 | 301、302 | 4xx | 客户端错误(可能是报文格式有问题,服务器无法解析) | 400、403、404 | 5xx | 服务器错误 | 500、502 |
200:OK,表示发送成功
204:Not Content,只包含响应头
301:Moved Permanently,永久重定向
302:Found,临时重定向
400:Bad Request,客户端报文有误
403:Forbidden,服务器禁止访问
404:Not Found,请求的资源未找到
500:Internal Server Error,内部错误
502:Bad Gateway,表示后端服务器发生错误
HTTP常见字段
Host | 服务器域名 |
---|
Content-Length | 数据长度 | Connection | 持久/非持久连接 | Content-Type | 数据格式 | Accept | 客户端能够接受的数据格式 |
Get和Post
Get是从服务器获取资源
Post是向URI提交数据
安全和幂等
安全指请求方法不会破坏服务器上的资源
幂等指多次操作结果不变
所以Get是安全且幂等的,Post是不安全不幂等的
HTTP特性
- 报文格式简单,key-value的首部+数据部分
- 易于扩展
- 跨平台
- 无状态,也就是HTTP在双方进行通信时,不知道对方是谁,一般会加上Cookie、Session等使其有状态
- 明文传输,调试很方便,但是容易被窃取
- 不安全:明文+不验证身份+可能被篡改(这几个问题可以通过HTTPS解决)
HTTP/1.x
1.0是短连接,1.1是长链接(多次通信只需建立一次连接)
三次握手建立连接、四次握手断开连接
- 多次通信只需要建立一次连接,加速+减少资源消耗
- 多次通信可以流水发送,不必等待响应,减少总的响应时间
- 如果有一个请求在服务器阻塞了,所有已发送的请求都会被阻塞
HTTPS
HTTPS:在TCP和HTTP之间加入了SSL/TLS安全协议,加密传输,443端口
相比于HTTP:
- HTTPS在建立连接时还需要进行SSL/TLS的握手过程
- 通过加密等方法,解决了HTTP不安全的几个问题
HTTPS增加的功能
使用对称加密和非对称加密结合的混合加密方式
-
通信建立前,使用非对称加密交换会话秘钥 -
通信过程中,使用对称加密的会话秘钥加密明文数据
非对称加密有公钥和私钥,公钥可以公开,解决了秘钥交换问题
对称加密秘钥必须保密,但是计算速度快
使用摘要算法,数据无法被篡改,如果数据被篡改了就不能正常显示
其实比较类似数据传输中的校验码之类的东西
服务器公钥放入数字证书(需要预先向证书权威机构申请数字证书),解决冒充风险
客户端使用公钥加密,服务器端使用私钥解密
HTTP/2和HTTP/3
HTTP/2基于HTTPS,所以是安全的
相较于1.1的改进
- 首部压缩,多个请求的重复首部不会被发送(HPACK算法)
- 二进制格式,将文本转化为二进制 再发送,增加传输效率
- 数据流,数据包不按顺序发送,所以必须在数据包中标记编号
- 可以指定请求优先级
- 多路复用,一个TCP连接并发多个请求/回应
- 服务器推送,可以主动把可能用到的JS、CSS等静态资源发送给客户端
2的局限性
- 复用同一个TCP,如果有丢包,就会引发重传,导致阻塞(只有这个包ACK了才,滑动窗口才会继续向后移动)
HTTP/3
为了解决2的问题,HTTP/3把HTTP下层的TCP修改成了UDP,通过UDP的QUIC协议实现可靠性传输。
缺点在于比较新,很多设备的UDP不支持QUIC,导致导致本应可靠的数据不可靠
Reference
小林Coding系列文章
HTTP是一个无状态的协议。这句话里的无状态是什么意思?
|