HTTP与浏览器篇

HTTP/HTTPS

HTTP 请求方法

请求方法主要用途是否幂等
GET获取资源,通常是数据读取操作
POST提交数据,通常用于创建新资源或提交表单数据
PUT完全更新资源,替换资源的所有内容
DELETE删除资源
PATCH部分更新资源,更新资源的一部分字段
HEAD获取资源的元信息(只返回头部,不返回内容)
OPTIONS获取服务器支持的 HTTP 方法(预检请求)
CONNECT建立与目标服务器的隧道(通常用于 HTTPS 连接)
TRACE回显服务器收到的请求,用于诊断

GET和POST请求的区别

1.功能和用途

2.参数传递方式

  • GET:通过 URL 传递参数,适用于少量数据,请求长度依赖于浏览器对URL的限制。
  • POST:通过请求体传递数据,适合提交大量数据或敏感信息。

3.安全 「安全」是指请求方法不会「破坏」服务器上的资源。

  • GET:「只读」操作,安全。
  • POST:「新增或提交数据」的操作,会修改服务器上的资源,不安全。

4.幂等性

  • GET:幂等的,重复请求不会影响服务器状态。
  • POST:非幂等的,重复请求可能会对服务器产生副作用(如创建多个相同的资源)

5.缓存机制

  • GET:可以被缓存,适用于静态资源请求,可以通过点击后退刷新按钮重复执行
  • POST:通常不被缓存,适用于数据提交或文件上传等场景。

HTTP版本

1.HTTP/1.0

特点:

  • 单连接模式:每个请求都需要建立一个新的 TCP 连接。
  • 无持久连接:每次请求和响应后连接会关闭。
  • 请求/响应头不压缩:数据传输中的头部信息未进行压缩。
  • 简单文本协议:协议设计简单,适合当时的需求,但不高效。

限制:

  • 每个请求都要重新建立 TCP 连接,浪费了大量时间和资源。
  • 存在队头阻塞问题(即一个请求的延迟会阻塞后续的请求)。

2.HTTP/1.1

特点:

  • 持久连接(Persistent Connection):默认使用持久连接,一个连接可以处理多个请求和响应。
  • 管道化(Pipelining):可以在等待响应时并行发送多个请求(但服务器按顺序处理响应,仍存在队头阻塞问题)。
  • 头部压缩:减少冗余数据,提高传输效率。
  • 缓存控制:引入缓存机制,提升性能。
  • Host 头部:支持虚拟主机,使多个网站可以共用一个 IP 地址。

改进:

  • 支持持久连接,减少了 TCP 连接的开销。
  • 更灵活的缓存机制和错误处理能力。

限制:

  • 队头阻塞仍然存在,多个请求仍然需要按顺序处理。
  • 管道化未得到广泛应用,性能提升有限。

3.HTTP/2

特点:

  • 二进制协议:相较于文本协议,二进制协议的解析和处理更加高效。
  • 多路复用(Multiplexing):多个请求和响应可以通过同一个连接并行传输,避免了队头阻塞问题。
  • 头部压缩(HPACK):对请求和响应的头部进行压缩,减少冗余数据。
  • 服务器推送(Server Push):服务器可以主动推送资源到客户端,无需客户端请求。
  • 流控制:允许客户端和服务器控制流量,避免资源过度消耗。

改进:

  • 多路复用显著提高了并发性能,减少了延迟。
  • 头部压缩减少了数据冗余。

限制:

  • 依然基于 TCP,虽然多路复用减少了队头阻塞,但 TCP 本身的一些限制(如慢启动)仍然存在。
  • 需要加密(HTTPS)来启用 HTTP/2。

4.HTTP/3

HTTP/3 是基于 QUIC 协议的最新版本,发布于 2020 年,使用 UDP 代替 TCP。

特点:

  • 基于 QUIC 协议:使用 UDP 替代 TCP,减少了连接建立时间和延迟。
  • 0-RTT 连接恢复:在重新连接时能够更快恢复数据传输,减少延迟。
  • 多路复用:每个流之间独立传输,丢包不会影响其他流,进一步减少了队头阻塞。
  • 内置加密:QUIC 协议内置加密,所有数据传输都是加密的。

改进:

  • 更低的延迟,特别是在丢包和网络不稳定时。
  • 更好的性能,尤其在移动设备上表现优异。

限制:

  • 依赖于 UDP,一些防火墙和代理可能会阻挡 QUIC 流量。
  • 仍然处于推广阶段,尚未被所有网络基础设施支持。

HTTP/1.1相比1.0有什么性能上的改进

  • 使用 TCP 长连接的方式改善了 HTTP/1.0 短连接造成的性能开销。
  • 支持 管道(pipeline)网络传输,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间

HTTP/2相较于HTTP/1.x有什么改进,特点,优势

HTTP/2 协议是基于 HTTPS 的,HTTP/2相对于HTTP/1.x在传输效率、安全性、网络性能等方面都有显著的提升。

  • 头部压缩: HTTP/2 会压缩头(Header)。如果同时发出多个请求,他们的头是一样的或是相似的,那么,协议会帮你消除重复的部分。这就是所谓的 HPACK 算法:在客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度了。
  • 二进制格式: HTTP/2 不再像 HTTP/1.1 里的纯文本形式的报文,而是全面采用了二进制格式。头信息和数据体都是二进制,并且统称为帧(frame):头信息帧和数据帧。
  • 数据流推送: HTTP/2允许服务器主动向客户端推送资源,而无需等待客户端的请求。这有助于减少往返时间,并提高网页加载速度。
  • 多路复用: HTTP/2 可以在一个连接中并发多个请求或回应,而不用按照顺序一一对应。 移除了 HTTP/1.1 中的串行请求,不需要排队等待,也就不会再出现「队头阻塞」问题,降低了延迟,大幅度提高了连接的利用率。

HTTP/2 有哪些缺陷?HTTP/3 做了哪些优化?

HTTP/2 主要的问题在于,多个 HTTP 请求在复用一个 TCP 连接,下层的 TCP 协议是不知道有多少个 HTTP 请求的。一旦发生了丢包现象,就会触发 TCP 的重传机制,这样在一个 TCP 连接中的所有的 HTTP 请求都必须等待这个丢了的包被重传回来。

这都是基于 TCP 传输层的问题,所以 HTTP/3 把 HTTP 下层的 TCP 协议改成了 QUIC协议(UDP)

UDP不管顺序,也不管丢包,所以不会出现 HTTP/1.1 的队头阻塞 和 HTTP/2 的一个丢包全部重传问题。

QUIC 是一个在 UDP 之上的伪 TCP + TLS + HTTP/2 的多路复用的协议。

QUIC 是新协议,对于很多网络设备,根本不知道什么是 QUIC,只会当做 UDP,这样会出现新的问题。所以 HTTP/3 现在普及的进度非常的缓慢。


HTTP与HTTPS有什么区别

  • HTTP 是超文本传输协议,信息明文传输,存在安全风险的问题。HTTPS在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。
  • HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。
  • HTTP 的端口号是 80,HTTPS 的端口号是 443
  • HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。

HTTPS是如何保证安全的

  • 信息加密,使用SSL/TLS协议对HTTP报文进行加密,这种过程是对称加密和非对称加密结合的「混合加密」方式:
    • 在通信建立前采用非对称加密的方式交换「会话秘钥」,后续就不再使用非对称加密1
    • 在通信过程中全部使用对称加密2的「会话秘钥」的方式加密明文数据。
  • 数据完整性保护

Footnotes

  1. 对称加密只使用一个密钥,运算速度快,密钥必须保密,无法做到安全的密钥交换。
  2. 非对称加密使用两个密钥:公钥和私钥,公钥可以任意分发而私钥保密,解决了密钥交换问题但速度慢。
许可协议

本文采用 署名-非商业性使用-相同方式共享 4.0 国际 许可协议,转载请注明出处。

Vue3.4核心源码实现指南

运行本项目与工具使用

评论区

评论加载中...