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报文进行加密,这种过程是对称加密和非对称加密结合的「混合加密」方式:
- 数据完整性保护
评论区
评论加载中...