当前位置: 首页 > 网络应用技术

HTTP历史记录 - 从http / 1到http / 3

时间:2023-03-08 21:00:21 网络应用技术

  Quan Mingyang,爱好魏伊的前端技术系:吉他,羽毛球,国际象棋

  说到HTTP,我必须首先简单地理解“万维网”。

  www是基于 <=> “链接跳跃站点”和“超级文本标签语言(HTML)的传输”技术综合。

  在1989年的仲夏夜,蒂姆·伯纳斯·李(Tim Bernas Lee)成功地开发了世界上第一款网络服务器和第一个网络客户端。目前,这只是一本电子电话簿。

  HTTP(超文本传输协议)是Wanwei.com的基本协议,该协议制定了浏览器和服务器之间的通信规则。

  通常的网络(包括Internet)基于TCP/IP协议。HTTP属于其内部的子集。

  HTTP连续地达到了更多的功能,并已从HTTP 0.9发展到HTTP 3.0。

  在HTTP开始时,它不是作为标准确定的。它被正式制定为1996年宣布的HTTP/1.0协议。因此,先前的协议称为HTTP/0.9。

  请求只有一行,只有一个get命令,该命令遵循命令背后的资源路径。

  REPONDS仅包含文件内容本身

  http/0.9没有标头的概念,也不具有内容类型的概念,并且只能传递html文件。此外,由于没有状态代码,当发生错误时,通过传递回到包含HTML文件来处理它错误描述。

  随着互联网技术的快速发展,HTTP协议正在越来越广泛地使用,协议本身的局限0.9,新版本包括以下功能:

  简单的文本页面自然无法满足用户的需求,因此1.0添加了更多文件类型|普通内容类型|||--- |--- |--- ||文字/计划|文本/html | text/css ||图像/JPEG |图像/PNG |图像/SVG + XML ||应用程序/JavaScript |应用程序/zip |应用程序/PDF |

  它也可以在HTML中使用

  由于支持任何数据格式的发送,因此可以在发送之前将数据压缩。http/1.0输入的内容输入以表示数据的压缩方法。

  客户发送请求我可以接受和两种压缩方法的节目发送请求

  服务器提供了响应响应第一部分的实际压缩模式

  HTTP/1.0宣布后仅几个月,释放了HTTP/1.1。到目前为止,近十年来还没有新的HTTP协议版本。

  与以前的版本相比,主要更新如下:

  由于建立连接过程需要DNS解析过程和TCP的三个握手,因此需要消费链接以获取同一服务器中的资源以获取资源的资源和时间是巨大的,以提高该资源的效率Connection.http/1.1似乎及时增加了长时间的连接,并作为默认实现实现。服务器端还根据协议维护客户端的长连接状态。

  您可以在请求标题中介绍以下信息以通知服务器,并且在完成请求请求后不要关闭连接。

  服务器还将回复连接仍然有效的相同信息,但是当时,这只是程序员的自定义行为。它不包括在1.0中的标准中

  这也为管道奠定了基础。

  HTTP/1.1试图通过HTTP管道技术解决性能瓶颈,并诞生了管道机制。如图所示,可以从响应返回结果中转动下一个请求的技术。

  不幸的是,HTTP是无状态协议。大或缓慢的响应仍将阻止所有后续请求。每个请求都不知道返回哪个响应。反应,这是在主流浏览器的默认值上关闭此功能,该功能将在http2.0中解决此问题。

  据信,每个服务器都绑定到唯一地址。因此,请求消息不会传递主机名(),而1.1中新添加的主机用于处理一个地址上的多个虚拟主机的情况。

  主机字段被添加到请求Head域,该域用于指定服务器的域名。主机字段,可以在同一服务器上构建不同的网站,这也为以后的虚拟化开发建立了基础。

  缓存不仅可以提高用户的访问率,还可以节省移动设备上的流量。因此,许多与缓存有关的新头域已添加到HTTP/1.1中,并设计了这些头部域周围更灵活,更丰富的缓存机制。

  缓存机制需要解决的问题包括:

  建立链接后,客户端可以使用链接发送多个请求。用户通常通过响应标头返回服务器的返回服务器的返回。但是,随着网络技术的持续开发,引入了越来越多的动态资源。此时,服务器无法知道该服务器的大小传输前要传输的资源,并且无法通过内容长度告知用户的资源。服务器可以在动态生成的资源时将其传输给用户。该机制称为“块状传输编码” .ADD“转移 - 元城:Chunket”标头域,以替换传统的内容长度。

  与HTTP 1.0相比,HTTP 1.1添加了几种缓存机制:

  强烈的姿势和强烈的垂直行业,即浏览器优先级的缓存,是最快的。当我们从状态代码(从内存磁盘上)看到时,这意味着浏览器从内存物种中读取缓存。当该过程结束后,即关闭选项卡,内存中的数据将不再存在。仅在未点击缓存时,会找到协议缓存。

  巴格马

  Pragma Head域是http/1.0的产物。当前仅定义为与HTTP/1.0的向后兼容性。与缓存控制的含义相同:无缓存。

  到期

  到期仅出现在头部域中,表明当请求发生时资源的及时性,浏览器将将浏览器的值与本地时间进行比较。如果当地时间小于设定时间,则读取缓存。

  值的值是标准GMT格式:

  应该在此处注意:当缓存控制:max-age = xx并在标题中存在到期时,缓存控制时间:max-age应占上风。

  缓存控制

  由于首次亮相的局限性,以下解释了几个常用字段

  当浏览器未达到缓存时,协商缓存将击中协商缓存,并且协商缓存由以下HTTP字段控制。

  最后模范

  当服务器将资源传输到客户端时,资源的最终修改时间将返回到实体的第一部分。

  收到客户端后,将标记资源信息。下次询问资源时,您将带有时间信息来检查服务器。如果传输值与服务器上的值一致,并且尚未修改,如果时间不一致,请重新要求资源请求和返回。

  优先级强阻尼 - >协商缓存 - > - > - > - > - >

  选项:确定交叉域请求资源的安全需要浏览器

  put:从客户端传输到服务器的数据替换指定的文档内容

  删除:请求服务器删除指定的页面

  跟踪:显示的服务器收到的请求主要用于测试或诊断

  连接:HTTP/1.1协议是为可以更改管道方法连接的代理服务器保留的

  您可以参考状态代码daquan

  根据《时代的开发》,网页变得更加复杂。其中一些是应用程序。显示更多的视觉媒体,交互式脚本的数量和大小也增加了。通过更多的HTTP请求传输了更多数据为HTTP/1.1连接带来了更多的复杂性和费用。为此,Google在2010年初实施了一项实验协议SPDY。在SPDY的成功方面,HTTP/2还将SPDY作为整个计划的蓝图作为开发计划的蓝图。。本质

  HTTP1.X标头具有很多信息,并且有必要每次反复发送。HPACK是HTTP/2的专门量身定制的制作,它像这样扩展。它使用索引表来定义常用的HTTP标头。通信的两个侧面有一个标题场表,该表不仅避免了重复的标头的传输,还可以减少变速箱的大小。

  该协议的格式似乎与HTTP1.X完全不同。实际上,HTTP2不会更改HTTP1.X的语义,而只是用框架封装了原始的HTTP1.X标头和车身部分。

  为了解决http/1.x中团队负责人的问题,http/2提出了多路重用的概念。在即将到来的请求/响应作为流中,并且流分为各种帧(基于负载,例如标题框架,数据框架等)。它可以在相同的连接上混合。同一时间发送多个请求的功能。多路重复意味着线性障碍物将不再是问题。

  本质

  服务可以主动向客户端发送消息。当浏览器刚刚要求时,服务器将积极发送一些资源,例如与静态资源的某些相关性,例如与客户端的某些相关性。这样,客户可以直接从当地加载这些资源。这将达到保存浏览器以发送请求请求的过程。

  使用服务器推

  您可以在服务器启动器中看到这是要积极推动的服务器。

  客户端使用简单的缓存摘要来告诉服务器已缓存的内容,因此服务器将知道哪些客户端需要。

  服务器和客户端用于在HTTP/2连接中交换帧数据的独立两条序列中。HTTP/2实际上在单个TCP连接上产生多个流。本地兴趣使用传输链接来实现有限资源中传输性能的优化。

  提出了流的概念以实现多路重复使用,并在单个连接上同时执行多个业务单元数据的传输。

  在HTTP/1.X中,用户建立了多个TCP连接以提高性能。这将导致团队头部阻塞,重要的TCP连接无法在HTTP/2中获得二进制框架层,以允许对较小帧的请求和响应数据。他们使用二进制编码(基于文本格式的HTTP1.0)。可以按顺序发送,并根据框架的第一部分(例如带有自己ID的每个流)的流程,可以重新组装。

  显然,二进制计算机非常友好。无需将收到明亮文本的数据包转换为二进制,但直接分析二进制数据包以进一步提高数据传输的效率。

  每个帧都可以视为学生,并且流是组(标签意识的属性值是框架的属性值)。一个类(一个连接)分为几个组。组任务可以在类中并行执行。一旦组的任务很严重,它不会影响其他组的任务的正常执行。

  最后,让我们看一下在理想状态下的HTTP2的改进

  缺点

  在有限的条件下,在TCP下解决团队的头部堵塞的问题非常困难,但是随着互联网的爆炸性开发,需要解决更高的稳定性和安全性。。制定了基于UDP的低删除Internet传输层协议。2018年11月,HTTP-Over-Ever-Quic更名为HTTP/3。

  客户端将SYN软件包(SYN SEQ = X)发送到TCP.1中的服务器;ack = y+1),到目前为止,客户端和服务器进入已建立的状态并完成三个握手。

  1-rtt

  因此,这里的关键是ECDH算法。A和B是客户和服务器的私钥。他们没有透露。即使他们知道A和X无法通过A = A*X公式得出A,它也可以确保私有键。

  0-RTT

  0-rtt是客户端缓存服务器config(b = b*x)。下次江安使用缓存数据计算通信密钥:

  客户端不需要发送手来通过缓存生成密钥来生成应用程序数据。

  让我们考虑一个问题:假设攻击者在服务器的随机数B(私钥)泄漏后记录所有通信数据和公共参数A1,A2,然后可以破解通信的所有数据。

  为了解决此问题,需要为每个会话创建一个新的通信密钥,以确保正面的安全性。

  QUIC基于UDP协议,UDP是不可靠的传输协议。Quic在每个数据包中都有一个偏移字段(偏移)。保证订单。

  HTTP/2具有TCP层团队阻止的原因是,所有请求流共享一个滑动窗口,而对每个请求流的QUIC分配了一个独立的滑动窗口。

  A请求流上的数据包丢失不会影响请求流的数据发送。但是,对于每个请求流,也存在一个团队封锁的问题,也就是说,尽管Quic求解了TCP层团队块,但仍然是一个单元的团队块。这是Quic No -Team Head的多道路复制。

  连接迁移:客户端切换网络时,与服务器的连接不会断开连接,并且仍然可以正常通信。对于TCP协议,这是不可能做到的。因为TCP的连接基于4元组:源IP,源端口,目标IP,目标端口,只要其中一个更改,就需要重新连接。- 建立。但是QUIC的连接基于64位连接ID。网络交换不会影响连接ID的更改。连接仍然在逻辑上。

  假设客户端首先使用IP1发送1和2个数据包,然后切换网络,将IP更改为IP2,并发送3和4个数据包。一个客户端。连接迁移的基本原因是基础UDP协议为面对没有连接。

  最后,让我们看一下HTTP的升级

  [参考]

  https://developer.mozilla.org/en-s/docs/web/httphtps://datatracker.ietf.org/doc/doc/rfc7540

  原始:https://juejin.cn/post/71110717988889800