HTTP再修炼 | 青训营笔记

237 阅读4分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第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

image.png HTTPS 采用的是对称加密非对称加密结合的「混合加密」方式:

  • 在通信建立前采用非对称加密的方式交换「会话秘钥」,后续就不再使用非对称加密。
  • 在通信过程中全部使用对称加密的「会话秘钥」的方式加密明文数据。
HTTP和HTTPS
  1. HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。
  2. HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。
  3. HTTP 的端口号是 80,HTTPS 的端口号是 443。
  4. HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。
HTTP1->HTTP2->HTTP3(QUIC)

image.png

HTTP框架分层设计的优势与劣势:\

优势:

  1. 分层设计可以提高框架的扩展性、可维护性、复用性
  2. 分层设计可以让相关同学聚焦在核心层上而不用关心其他层的实现 劣势:
  3. 提高代码设计的复杂性,设计不好可能会导致循环依赖
  4. 由于使用接口进行解耦,可能会对代码性能造成影响

image.png