http1.1 http2.0 http3.0

2024-01-01 10:58
文章标签 http3.0 http1.1 http2.0

本文主要是介绍http1.1 http2.0 http3.0,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

开始先来一段FAQ

什么是http1

https://blog.wangriyu.wang/2018/03-http-message.html

什么是http2

https://blog.wangriyu.wang/2018/05-HTTP2.html

http1.1

URL or URN?

都是URI的子集。URL:告诉我们访问网络位置的方式;URN:包括名字(给定的命名空间内),但是不包括访问方式

URI包含很多,举例:

ftp://ftp.is.co.za/rfc/rfc1808.txt

http://www.ietf.org/rfc/rfc2396.txt

ldap://[2001:db8::7]/c=GB?objectClass?one

mailto:John.Doe@example.com

news:comp.infosystems.www.servers.unix

tel:+1-816-555-1212 telnet://192.0.2.16:80/

urn:oasis:names:specification:docbook:dtd:xml:4.1.2

什么是幂等性?

幂等性指的是作用于结果而非资源本身。

例如:

get请求就是幂等,只是查询,不对最终结果产生影响

post请求非幂等,每次都新增,对资源本身产生影响,从PATCH和DELETE更泛化来看:一次操作和多次操作是产生不同效果的,那就需要注意了非幂等

TCP连接数限制?

一个浏览器限制一般为6~8个,注意是端上的不知道W3C当时咋想的。

http管线化?

打包发送,FIFO会出现队头阻塞,只支持幂等操作管线化,同时需要客户端和服务端都支持。

耗时分布?

每次新建连接 DNS 解析需要时间(几 ms 到几百 ms 不等)、TCP 慢启动也需要时间、TLS 握手又要时间,而且后续请求都要等待队列调度。

 

http2.0

什么是HSTS?

幂等性指的是作用于结果而非资源本身。

什么是帧frame?

所有帧都是一个固定的 9 字节头部 (payload 之前) 跟一个指定长度的负载 (payload)。

什么是流stream?

流只是一个逻辑上的概念,代表 HTTP/2 连接中在客户端和服务器之间交换的独立双向帧序列,每个帧的 Stream Identifier 字段指明了它属于哪个流。

 

http3.0

什么是http3?

互联网工程任务组正式将基于 QUIC 协议的 HTTP (HTTP over QUIC)重命名为 HTTP/3

什么是QUIC协议?

QUIC(Quick UDP Internet Connections,快速 UDP 网络连接) 基于 UDP,正是看中了 UDP 的速度与效率。同时 QUIC 也整合了 TCP、TLS 和 HTTP/2 的优点,并加以优化。

什么是连接迁移?

QUIC 的连接不受四元组的影响,当这四个元素发生变化时,原连接依然维持。那这是怎么做到的呢?道理很简单,QUIC 连接不以四元组作为标识,而是使用一个 64 位的随机数,这个随机数被称为 Connection ID,即使 IP 或者端口发生变化,只要 Connection ID 没有变化,那么连接依然可以维持。

如何解决队头阻塞和多路复用?

HTTP/1.0时代:每次请求都要在收到上次请求的 ACK 消息后再请求,那么效率无疑很低。

HTTP/1.1时代:后来 HTTP/1.1 提出了 Pipelining 技术,允许一个 TCP 连接同时发送多个请求,这样就大大提升了传输效率。

在这个背景下,下面就来谈 HTTP/1.1 的队头阻塞。下图中,一个 TCP 连接同时传输 10 个请求,其中第 1、2、3 个请求已被客户端接收,但第 4 个请求丢失,那么后面第 5 - 10 个请求都被阻塞,需要等第 4 个请求处理完毕才能被处理,这样就浪费了带宽资源。

HTTP/2.0时代:HTTP/2 中每个请求都被拆分成多个 Frame 通过一条 TCP 连接同时被传输,这样即使一个请求被阻塞,也不会影响其他的请求。

在一条 TCP 连接上同时发送 4 个 Stream,其中 Stream1 已正确送达,Stream2 中的第 3 个 Frame 丢失,TCP 处理数据时有严格的前后顺序,先发送的 Frame 要先被处理,这样就会要求发送方重新发送第 3 个 Frame,Stream3 和 Stream4 虽然已到达但却不能被处理,那么这时整条连接都被阻塞。 

不仅如此,由于 HTTP/2 必须使用 HTTPS,而 HTTPS 使用的 TLS 协议也存在队头阻塞问题。TLS 基于 Record 组织数据,将一堆数据放在一起(即一个 Record)加密,加密完后又拆分成多个 TCP 包传输。一般每个 Record 16K,包含 12 个 TCP 包,这样如果 12 个 TCP 包中有任何一个包丢失,那么整个 Record 都无法解密。

HTTP/3.0时代:

  • QUIC 的传输单元是 Packet,加密单元也是 Packet,整个加密、传输、解密都基于 Packet,这样就能避免 TLS 的队头阻塞问题;

  • QUIC 基于 UDP,UDP 的数据包在接收端没有处理顺序,即使中间丢失一个包,也不会阻塞整条连接,其他的资源会被正常处理。

参考资料:

https://zh.wikipedia.org/wiki/HTTP/2

https://httpwg.org/specs/rfc7540.html

https://zh.wikipedia.org/wiki/HTTP%E4%B8%A5%E6%A0%BC%E4%BC%A0%E8%BE%93%E5%AE%89%E5%85%A8

https://dev.mobify.com/blog/domain-sharding-bad-news-mobile-performance/

这篇关于http1.1 http2.0 http3.0的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/559046

相关文章

HTTP1.1与HTTP1.0的区别

HTTP1.0规定浏览器和服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求后立刻断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。           图1 HTTP1.0中TCP需要建立多次连接 如上图,如果浏览器访问一个网页需要加载3个图片文件和一个网页文档,则需要多次的请求和相应,每次请求和相应都需要建立一个单独的连接,每次连接只

http发展史(http0.9、http1.0、http1.1、http/2、http/3)详解

文章目录 HTTP/0.9HTTP/1.0HTTP/1.1@队头阻塞(Head-of-Line Blocking)1. TCP 层的队头阻塞2. HTTP/1.1 的队头阻塞 HTTP/2HTTP/3 HTTP/0.9 发布时间:1991年 特点: 只支持 GET 方法没有 HTTP 头部响应中只有 HTML 内容,没有任何元数据。 缺点: 功能极其有限,

http1.0 http1.1 http2.0 http3.0 超文本传输协议升级转换

关于HTTP/2,最近你可能没少听到过他,首先,如果你了解过Java 9的特性,那么你会发现在Java9中,提供了新的方式来处理HTTP调用,提供了新的HTTP Client,将替代HttpURLConnection,并提供对WebSocket和HTTP/2的支持。还有前两天刚刚发布的Spring Boot 2.0 的新特性中,也会看到,Spring Boot 2.0支持的Web容器中Tomcat

【WP】猿人学_17_天杀的Http2.0

https://match.yuanrenxue.cn/match/17 抓包分析 居然对Fiddler有检测,不允许使用 那就使用浏览器抓包,好像没发现什么加密参数,然后重放也可以成功,时间长了也无需刷新页面,尝试Python复现。 Python复现 import requestsheaders = {"authority": "match.yuanrenxue.cn","

http1.0 http 1.1 http2.0的区别

http1.0 短链接 http1.1 长链接 http2.0 多路复用   https://blog.csdn.net/jiaowademeng/article/details/81352945

面试必问的http-1.3:http1.0-http1.1-http1.2区别

Http1.1 由于HTTP 1自身的局限性,它不能很好的为用户提供性能良好的WEB服务。 于1999年6月正式发布了HTTP1.1标准REC2616,它厘清了之前版本中很多有歧义的地方,而且还新增了很多重要的优化, 如持久连接、分块编码传输、状态码扩充、增强的缓存机制、传输编码及请求管道等。 1.持久连接 每个TCP连接在建立初期都需要进行三次握手,需要经历一次客户端与服务器间的完整往返,

HTTP2.0协议初探(一)

最近需要接触到HTTP2.0的测试工作,所以需要对HTTP2.0协议由浅至深进行了解,因此准备写一个系列的内容,目的是记录学习过程以及以后的工作。 协议简介 HTTP 全称为 HyperText Transfer Protocol,中文叫做超文本传输协议。用于 Web 应用层传输,是 Web 架构的核心,它至今公布有 3 个版本: HTTP 0.9,只有基本的文本 GET 功能。HTTP

HTTP2.0编解码实现:C语言框架-第一章 HTTP2.0 概述和环境准备

HTTP2.0编解码实现:C语言框架-第一章 HTTP2.0 概述和环境准备 第1章:HTTP2.0 概述和环境准备1.1 HTTP2.0 简介1.2 HTTP/2.0 核心特性1.3 HTTP/2.0 与 HTTP/1.x 的比较1.4 HTTP/2.0 帧类型1.5 HTTP/2.0 连接建立1.6 开发环境准备1.7 开发流程概述1.8 编码风格和规范1.9 总结 第1章:

http1.1和http2.0的同源请求数限制

判断协议版本 :scheme: 在请求头中表示使用的是HTTP/2协议。即 出现 :开头的请求头Chrome 只支持查看 HTTP/1.x 的 Raw Headers,对这种请求,会给出 view source 选项。HTTP2.0不给出。可继续学习 https://www.cnblogs.com/kirito-c/p/10360868.html抓包看response 同源请求数 Chro

Http1.1与Http1.0的比较

原文链接:http://blog.csdn.net/hanxuemin12345/article/details/18942305 Http1.1比Http1.0的主要改进: (1)允许在一个TCP连接上可以传送多个http请求和响应;——这样一个包含多个图像的网页的多个请求和响应就可以在一个连接中进行传输了,但是每个单独的网页文件的请求和..仍然还是需要使用各自的连接的。 (2