http1、http1.1、http2

2023-12-25 12:12
文章标签 http2 http1 http1.1

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

http(HyperText Transfer Protocol),是超文本传输协议,是目前互联网上运用最广泛的一种网络协议,所有的www文件必须遵守该协议。(属于应用层协议)

http的工作流程

  • 浏览器与服务器建立TCP连接,即三次握手
  • TCP连接成功,浏览器发出http请求命令
  • 服务器接受请求并返回http响应
  • 服务器关闭连接,即四次挥手
  • 浏览器解析请求的资源

HTTP报文

分为请求和响应报文

http1.0

特点:

  • 每次请求都必须新建一次连接,必须通过TCP的三次握手才能开始传输数据,然后四次挥手结束连接。
  • 不跟踪每个浏览器的历史请求

缺点:

  • 每次都得建立TCP连接,费时费力
  • 队头阻塞,下一个请求必须在前一个请求响应到达后发送。如果某请求一直不到达,那么下一个请求就一直不发送。

http1.1

http1.1中默认支持长连接,即在一个TCP连接上可以传输多个http请求和响应,减少了建立和关闭连接的消耗和延迟。

特点:

  • 支持长连接,通过Keep-Alive保持http连接不断开,避免重复建立TCP连接
  • 管道化,通过长连接实现在一个连接中传输多个文件
  • 加入cache-control缓存处理
  • 增加了Host字段
  • 添加了put、delete、options等其他请求方法
  • 支持断点续传

改进和优化

  • http管道化:是指将多个http请求整批提交给服务器的技术,虽然可以整批发送请求,但是服务器依然需要根据请求顺序来回复浏览器的请求。
  • 对动态生成的内容提供了更好的支持:http1.0中,需要在响应头中设置完整的数据大小,浏览器根据设置的数据大小来接受数据。http1.1中引入了chunk transfer机制,服务器将数据分隔为若干个任意大小的数据块,每个数据块发送是附上上个数据块的长度,最后一个0长度的块作为发送数据完成的标志
  • 浏览器为每个域名同时维护6个TCP持久连接,但是这些连接会竞争带宽。

缺点:

  • 队头阻塞
  • 无状态特性,协议对于连接状态没有记忆能力
  • 不安全性 传输内容没有加密
  • 不支持服务端推送

http2

特性:

  • 二进制传输:将请求和 响应数据分为更小的帧,采用二进制编码
  • 多路复用: 同一个域名下所有通信都是在单个连接上完成,单个连接可以承载任意数量的双休数据流,数据流以消息形式发送,而消息由一个或多个帧发送
  • 支持服务器端推送,服务端可以主动向客户端发送消息,提前推送客户端需要的静态资源
  • 提供安全性,http2也是明文的,只不过格式是二进制的,但http2都是https协议的,跑在TSL上面

http2仍然存在问题,TCP+TSL建立连接的时间是主要瓶颈,没从根本上解决队头阻塞问题,如果遇到丢包,tcp协议还是会重新发送数据。http2中多个请求跑在一个TCP管道中,如果其中任意一路数据流出现丢包,就会阻塞tcp连接中的所有请求。

http3

http3甩掉TCP、TSL的包袱,构建高效网络QUIC协议

HTTP3选择了UDP协议,基于UDP实现了类似TCP的多路数据流、传输可靠性等功能,将这套功能称为QUIC协议。

 特性:

  • 基于UDP协议改造,实现了快速握手
  • 集成了TLS的加密功能
  • 多路复用,彻底解决了头阻塞问题(一个物理连接上可以有多个独立的逻辑数据流,实现了数据流的单独传输)
  • 实现了类似TCP的流量控制、传输可靠性的功能

队头阻塞是指:当顺序发送的请求序列中的一个请求因为某种原因阻塞时,在后面排队的请求也一并阻塞,导致客户端收不到数据。

解决队头阻塞:

  1. 将同一页面的资源分散到不同域名下,提示连接上限。
  2. spriting合并多张小图为一张大图,再用JavaScript或css将小图重新分割
  3. 内联,将图片的原始数据嵌入在css文件里面的url里来减少网络请求次数

总结

http1.0

浏览器与服务器只保持短暂的链接,浏览器每次请求都需要与服务器建立一个TCP连接

http1.1

  • 引入了持久连接,tcp不关闭,多个请求复用同一个TCP连接
  • 多个请求按次序在服务端被处理
  • 新增了一些请求方法、请求头和响应头

http2.0

  • 采用了二进制而非文本字符串格式
  • 多路复用,只需要建立一个连接即可实现并行
  • 使用爆头压缩,降低开销
  • 服务器推送

HTTP3.0

  • QUIC 基于 UDP 实现,是 HTTP/3 中的底层支撑协议,该协议基于 UDP,又取了 TCP 中的精华,实现了即快又可靠的协议。

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



http://www.chinasem.cn/article/535472

相关文章

HTTP1.1与HTTP1.0的区别

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

HTTP 之 HTTP/1.0、HTTP/1.1和HTTP2的缓存策略(六)

HTTP/1.0 缓存策略: Expires 头部:HTTP/1.0 使用 Expires 头部来指定资源的过期时间。浏览器将根据这个时间来判断是否需要从服务器重新获取资源。 Pragma 头部:Pragma: no-cache 用于告诉浏览器或代理服务器不要使用本地缓存的版本。 HTTP/1.1 缓存策略: HTTP/1.1 对缓存机制进行了扩展和改进: Cache-Control

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 内容,没有任何元数据。 缺点: 功能极其有限,

http2问题以及http3的出现

http2的问题: 队头阻塞 http2 解决http队头阻塞问题,但是没有解决tcp队头阻塞问题 http1.1引入了持久化连接:在一个tcp连接上可以传送多个http的请求和相应,减少建立连接和关闭连接的消耗和延迟 http1.1在持久化连接上支持请求管道,就是在http响应到达之前,可以将多条请求放入队列,当第一条http请求通过网络流向服务器时,第二条和第三条请求也开始发送。再有网

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

【ssl】启用http2时遇到的重重问题

【背景】 用pyping server传流式数据,必须启用http2,http2又必须有https支持。反复尝试,打破一个个err,最终成功。此篇记录一路上遇到的各类err和解决办法。 【问题和方案】 第一个警告:流式传输必须启用http2或http3(quic) 原本我是用http1.1启动的服务,所以有问题。查了一下,必须开ssl才能支持http2,所以问题就变成如何开ssl https

HTTP2协议主要改进点

HTTP2协议主要改进点 1、改成二进制协议,每次传输二进制帧,帧有以下几个字段 类型type,长度length,flag,StringID流标志,Payload负载,最基础的两种类型HEAD类型和DATA类型 2、多路复用,可以在一个连接上,同时传输多个数据流,每个流的传输顺序是固定的,按先后到达拼接 3、支持优先级,通过权重 4、支持重置中断,在HTTP/1.1中,如果一个请求发出去

【已解决】Error in the HTTP2 framing layer

1.问题描述 在使用git将代码上传github的时候在最后一部push的时候遇到这个fatal 2.解决方案 由于我原先设置的origin是http协议下的,如下 git remote add origin https://github.com/Charlesbibi/Simple_Cloud.git http协议下行不通不妨试一试ssh协议下,就有如下解决方案 # 删除原始or

gin框架-37--HTTP2 server 推送

gin框架37--HTTP2 server 推送 介绍案例说明 介绍 本文主要介绍 HTTP2 server 推送。 服务器推送(server push)指的是,还没有收到浏览器的请求,服务器就把各种资源推送给浏览器。比如,浏览器只请求了index.html,但是服务器把index.html、style.css、example.png全部发送给浏览器。这样的话,只需要一轮 HTT

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

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