We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
虽然长连接可以减少 TCP 握手的次数,但是 HTTP 请求的发送是按顺序的,当前请求没有响应就不会发送下一个请求,这样就会导致队头阻塞,降低页面加载速度。
解决方案:
由于无状态的特性,每次发送的 HTTP 请求都要带上一个巨大的头部,即使请求体或者响应体的内容非常少。
HTTP/1.1 传输内容使用的是明文,会带来安全性隐患。
HTTP/2 基于 Google 开发的 SPDY 协议,目的是提高性能。
HTTP/2 采用二进制格式传输数据,相比于 HTTP/1.1 使用纯文本形式的报文,二进制协议解析更高效。 HTTP/2 将请求数据与响应数据分割为更小的帧,多个帧可以乱序发送,根据帧首部的流标识重新组装。
HTTP/2 实现多路复用,同一个域名可以只占用一个 TCP 连接,可以在一个 TCP 连接里传输所有的数据。
在 HTTP/1.1 中,服务端只能被动响应请求,请求由客户端发起。
在 HTTP/2 中,服务端可以主动推送资源到客户端,例如,在浏览器请求 HTML 文件时,把相应的脚本、 CSS 也推送到浏览器,而不必等待浏览器解析 HTML 的时候再发送。
客户端也可选择是否接收服务端的主动推送。
主动推送也遵守同源策略,服务端不能随便将第三方资源推送给客户端,而需要经过双方确认。
HTTP/2 实际上兼容 HTTP/1.1 的明文传输,不强制加密,但 HTTPS 是趋势,互联网上见到的 HTTP/2 都是使用的 HTTPS ,所以 HTTP/2 在事实上是加密的。
HTTP/2 也是基于 TCP 的,意味着无法避免 TCP 握手的过程。
另外,如果使用 HTTPS ,则还要加上 TLS 的握手过程。
虽然减少了 TCP 的连接数量,但是没有解决 TCP 队头阻塞的问题。
TCP 有丢包重传的机制,当出现丢包时,整个 TCP 连接都要等待重传,在这种情况下, HTTP/2 的延迟可能还高于有多个 TCP 连接的 HTTP/1.1 。
要避免 TCP 队头阻塞的问题,只能不用 TCP 。
Google 开发了基于 UDP 的 QUIC 协议
QUIC 协议特点:
The text was updated successfully, but these errors were encountered:
有关于 HTTP/2.0 多路复用
在 HTTP/1.1 中,如果要并发多个请求,需要开多个 TCP 连接,每个 TCP 连接中同一时刻只能处理一个请求。
而使用管线化技术,虽然可以同时发送多个请求,但响应的顺序需要与请求发送的顺序一致,而有队头阻塞问题(HTTP)。
HTTP/2.0 的多路复用,就能解决上述 HTTP 队头阻塞问题。 HTTP/2.0 传输的数据是二进制帧,每个 TCP 连接都承载着双向流通的流,每一个流都有一个独一无二的标识和优先级,而流就是由二进制帧组成的。二进制帧的头部信息会标识自己属于哪一个流,所以这些帧可以交错传输。
但是 HTTP/2.0 无法解决 TCP 的队头阻塞问题。
Sorry, something went wrong.
No branches or pull requests
HTTP/1.1 的缺陷
队头阻塞
虽然长连接可以减少 TCP 握手的次数,但是 HTTP 请求的发送是按顺序的,当前请求没有响应就不会发送下一个请求,这样就会导致队头阻塞,降低页面加载速度。
解决方案:
HTTP 头部信息巨大
由于无状态的特性,每次发送的 HTTP 请求都要带上一个巨大的头部,即使请求体或者响应体的内容非常少。
明文传输
HTTP/1.1 传输内容使用的是明文,会带来安全性隐患。
HTTP/2 新特性
HTTP/2 基于 Google 开发的 SPDY 协议,目的是提高性能。
二进制传输
HTTP/2 采用二进制格式传输数据,相比于 HTTP/1.1 使用纯文本形式的报文,二进制协议解析更高效。 HTTP/2 将请求数据与响应数据分割为更小的帧,多个帧可以乱序发送,根据帧首部的流标识重新组装。
Header 压缩
多路复用
HTTP/2 实现多路复用,同一个域名可以只占用一个 TCP 连接,可以在一个 TCP 连接里传输所有的数据。
主动推送
在 HTTP/1.1 中,服务端只能被动响应请求,请求由客户端发起。
在 HTTP/2 中,服务端可以主动推送资源到客户端,例如,在浏览器请求 HTML 文件时,把相应的脚本、 CSS 也推送到浏览器,而不必等待浏览器解析 HTML 的时候再发送。
客户端也可选择是否接收服务端的主动推送。
主动推送也遵守同源策略,服务端不能随便将第三方资源推送给客户端,而需要经过双方确认。
安全性
HTTP/2 实际上兼容 HTTP/1.1 的明文传输,不强制加密,但 HTTPS 是趋势,互联网上见到的 HTTP/2 都是使用的 HTTPS ,所以 HTTP/2 在事实上是加密的。
HTTP/2 缺点
建立 TCP 协议的时延
HTTP/2 也是基于 TCP 的,意味着无法避免 TCP 握手的过程。
另外,如果使用 HTTPS ,则还要加上 TLS 的握手过程。
TCP 队头阻塞
虽然减少了 TCP 的连接数量,但是没有解决 TCP 队头阻塞的问题。
TCP 有丢包重传的机制,当出现丢包时,整个 TCP 连接都要等待重传,在这种情况下, HTTP/2 的延迟可能还高于有多个 TCP 连接的 HTTP/1.1 。
HTTP/3 新特性
要避免 TCP 队头阻塞的问题,只能不用 TCP 。
Google 开发了基于 UDP 的 QUIC 协议
QUIC 协议特点:
参考
The text was updated successfully, but these errors were encountered: