这是我参与「第三届青训营 -后端场」笔记创作活动的第2篇笔记.
HTTP协议(超文本传输协议)
为什么需要协议?
网络上传输数据时,需要一定的规则才能让对方理解。首先需要明确消息的边界(何时开始到何时结束),其次是对消息的类型及内容的描述。
准确地讲,HTTP 是一个在计算机世界里专门在「两点」之间「传输」文字、图片、音频、视频等「超文本」数据的「约定和规范」。
Get与Post
1、GET请求的数据会暴露在地址栏中,而POST请求则不会,POST请求的数据在HTTP请求包的包体中。
2、Get请求传输数据量 受到URL长度的限制;Post请求由于不是URL传值,理论上是不受限的。
3、POST的安全性比GET的高。如用get请求登录的话,登录信息都会暴露在URL中。
4、GET请求会被浏览器主动缓存,而POST不会,除非手动设置。
5、GET是幂等的,而POST不是幂等的(幂等表示执行相同操作得到相同结果)
HTTP状态码
| 1xx | 信息,服务器收到请求,需要请求者继续执行操作 |
|---|---|
| 2xx | 成功,操作被成功接收并处理 |
| 3xx | 重定向,需要进一步的操作以完成请求 |
| 4xx | 客户端错误,请求包含语法错误或无法完成请求 |
| 5xx | 服务器错误,服务器在处理请求的过程中发生了错误 |
常见:
200 - 请求成功
301 - 资源(网页等)被永久转移到其它URL
302 - 临时移动
400 - 客户端请求的语法错误,服务器无法理解
401 - 请求要求用户的身份认证
403 - 服务器理解请求客户端的请求,但是拒绝执行此请求
404 - 请求的资源(网页等)不存在
500 - 内部服务器错误
HTTP字段
- Host 字段 客户端发送请求时,用来指定服务器的域名。 (request)
- Content-Length 字段 服务器在返回数据时,会有
Content-Length字段,表明本次回应的数据长度。(response) - Connection 字段 客户端要求服务器使用 TCP 持久连接,以便其他请求复用
- Content-Type 字段 用于服务器回应时,告诉客户端,本次数据是什么格式
- Accept 字段 客户端请求的时候,可以使用
Accept字段声明自己可以接受哪些数据格式。 - Content-Encoding 字段 表示服务器返回的数据使用了什么压缩格式
- Accept-Encoding 字段 说明客户端可以接受哪些压缩方法。
HTTPS
HTTPS 采用的是对称加密和非对称加密结合的「混合加密」方式:
- 在通信建立前采用非对称加密的方式交换「会话秘钥」,后续就不再使用非对称加密。
- 在通信过程中全部使用对称加密的「会话秘钥」的方式加密明文数据。
HTTP和HTTPS
- HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。
- HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。
- HTTP 的端口号是 80,HTTPS 的端口号是 443。
- HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。
HTTP1->HTTP2->HTTP3(QUIC)
HTTP框架分层设计的优势与劣势:\
优势:
- 分层设计可以提高框架的扩展性、可维护性、复用性
- 分层设计可以让相关同学聚焦在核心层上而不用关心其他层的实现 劣势:
- 提高代码设计的复杂性,设计不好可能会导致循环依赖
- 由于使用接口进行解耦,可能会对代码性能造成影响