一文带你读懂HTTP协议的前世今生

点击上方蓝字关注我们

HTTP,Hypertext Transfer Protocol,超文本协议,是在万维网上传输文件(如文本、图形图像、声音、视频和其他多媒体文件)的规则集。如果web用户打开他们的web浏览器了,其实该用户就间接地利用到了HTTP。

HTTP (Hypertext Transfer Protocol) is the set of rules for transferring files, such as text, graphic images, sound, video, and other multimedia files, on the World Wide Web. As soon as a web user opens their web browser, the user is indirectly making use of HTTP.

https://whatis.techtarget.com/definition/HTTP-Hypertext-Transfer-Protocol

HTTP是在TCP/IP协议套件(因特网基础协议)之上运行的应用协议。HTTP的最新版本是HTTP/2,它是在2015年5月发布的。它是它的前身http1.1的一个替代品,但是它不会过时。

HTTP is an application protocol that runs on top of the TCP/IP suite of protocols (the foundation protocols for the Internet). The latest version of HTTP is HTTP/2, which was published in May 2015. It is an alternative to its predecessor, HTTP 1.1, but does not it make obsolete.

https://whatis.techtarget.com/definition/HTTP-Hypertext-Transfer-Protocol

HTTP的发展是由蒂姆·伯纳斯-李于1989年在欧洲核子研究组织(CERN)所发起。由万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(Internet Engineering Task Force,IETF)制定标准,最终发布了一系列的RFC。

在2019年,委员会发布最新的HTTP3。

写在开头:HTTP的基础

HTTP是一种无状态协议,即服务器不保留与客户交易时的任何状态。这就大大减轻了服务器记忆负担,从而保持较快的响应速度。

HTTP是一种面向对象的协议:它允许传送任意类型的数据对象,通过数据类型和长度来标识所传送的数据内容和大小,并允许对数据进行压缩传送。

HTTP规范定义了9种请求方法,每种请求方法规定了客户和服务器之间不同的信息交换方式,常用的请求方法是GET和POST。服务器将根据客户请求完成相应操作,并以应答块形式返回给客户,最后关闭连接。

截止2020年11月,HTTP共研究发布了五大版本,即:0.9协议、1.0协议、1.1协议、2.0协议 和 3.0协议[2020年6月10日 IETF 发布了 QUIC 最后一个草案]

   

HTTP 0.9


1991年,Tim Berners-Lee 概述了使用新协议的动机,并列出了几个高级设计目标:文件传输功能,请求对超文本档案进行索引搜索的能力,格式协商以及将客户端引用到另一台服务器的能力

为了证明该理论的有效性,构建了一个简单的原型,该原型实现了所建议功能的一小部分:

  1. 客户端请求是单个ASCII字符串。

  2. 客户请求由回车(CRLF)结尾。

  3. 服务器响应是ASCII字符流。

  4. 服务器响应是超文本标记语言(HTML)。

  5. 文档传送完成后,连接终止。

HTTP 0.9 的基本格式:

$ telnet www.baidu.com 80
GET /case.html(响应内容)
(connection closed)

使用telnet客户端进行一次HTTP/0.9的GET请求(以请求百度服务器为例):

HTTP 1.0

随着互联网应用需求的活跃,更加完善全面的HTTP1.0出现了,在1999年之后,它开始广泛应用于现在的各大浏览器网络请求中。

  • 1991年至1995年是HTML规范的快速演变,一种称为“ Web浏览器”的新型软件以及面向消费者的公共Internet基础结构的出现和快速发展起来。

  • 1994年Netscape Navigator浏览器正式发布1.0版本。(2007年彻底停止开发)。

  • 新的Web功能的不断增长及其在公共网络上的用例迅速暴露了HTTP/0.9的许多不足之处。1996年5月,HTTP工作组(HTTP-WG)发布了RFC 1945,里面包含了很多“通用法则” 。

HTTP/1.0 通用法则

请求可以由多个首部字段构成。
响应对象前面添加了一个响应状态行。
响应对象具有自己的一组由换行符分隔的首部字段。
媒体类型协商,响应对象不限于超文本。
每次请求后,服务器和客户端之间的连接都会关闭。

使用telnet客户端进行一次HTTP/1.0的GET请求(以请求百度服务器为例):

HTTP 1.1

HTTP/1.0和HTTP/1.1的标准制定工作其实是同时进行的,实际上,在HTTP/1.0发布大约六个后,也就是1997年1月,第一个正式的HTTP/1.1标准RFC 2068也正式发布了。

HTTP/1.1标准解决了早期版本中的许多协议歧义,并引入了许多关键的性能优化:持久连接、分块编码传输、字节范围请求、增强的缓存机制、传输编码和请求流水线。

HTTP/1.1的“特异功能之一”:支持启用多个子域名(让DNS解析请求资源更加快)

HTTP/1.1的“特异功能之二”:持久连接(一个HTTP连接传输多个图片)

弊端:在HTTP/1.1协议中,浏览器客户端在同一时间,针对同一域名下的请求有一定数量限制,
如果超过限制数目的请求会被阻塞;
如果一旦有某请求超时等,后续请求只能被阻塞,毫无办法。

使用telnet客户端进行一次HTTP/1.1的GET请求(以请求百度服务器为例):

HTTP 2.0

HTTP/2标准RFC 7540在2015年正式发布。 

HTTP/2对HTTP/1.1的主要改进集中在提高性能上:引入了诸如多路复用、首部压缩、优先级划分、二进制编码等。

HTTP2.0 中的一些关键功能是从早期的非标准协议SPDY中衍生的。SPDY是一项实验性协议,由Google开发,并于2009年宣布,其主要目的是通过解决HTTP/1.1的一些众所周知的性能限制来尝试加快网页加载。

HTTP2.0 的主版本号的增加听起来像是要做大的改进,从性能的角度说确实如此。但是从另一方面看,HTTP的高层协议语义并不会因为这次版本升级而受影响。所有的HTTP首部、值、以及他们的使用场景都不会变。

HTTP/2.0 的“特异功能之一”:多路复用(多个请求可同时在一个连接上并行执行。某个请求任务耗时严重,不会影响到其它连接的正常执行)

HTTP 3.0

HTTP/3 抛弃使用 TCP,转而使用 QUIC,所以被命名为“基于 QUIC 的超文本传输协议”。

QUIC(Quick UDP Internet Connections)是Google设计的一套可靠UDP传输协议,旨在为HTTP提供一个安全、可靠、高效和低延时的通信基础。

QUIC 相比现在广泛应用的 HTTP/2+TCP+TLS 协议有如下优势:

  1. 减少了 TCP 三次握手及 TLS 握手时间。

  2. 改进的拥塞控制。

  3. 避免队头阻塞的多路复用。

  4. 连接迁移。

  5. 前向冗余纠错。

HTTP/2+QUIC 在浏览器中:

QUIC: 连接建立延时低:

在HTTPS协议中,由于TCP和TLS都各需要自3次握手,
导致连接建立过程较为复杂和耗时,降低了HTTPS的效率。
QUIC选择UDP来作为其底层协议,就可以将连接建立和密钥协商的过程合二为一,
简化操作流程,提高连接效率。

    QUIC: 没有队头阻塞的多路复用

HTTP/1.1:虽然支持了Pipelining,但多个请求的回应依然需要顺序返回,
如果其中一个请求的处理出现延误,后面所有的请求都会受影响。


HTTP/2.0:利用多路复用则解决了这个问题,不同请求的回应可以乱序返回,避免单路的问题影响其他支路的传输。


QUIC协议:更进一步,在UDP的基础上实现了对多个独立可靠传输通道的支持,
这些独立的传输通道有各自的ACK和流控,一个通道的问题不会影响其他通道的传输,
使得网络通信的可靠性和传输能力得以提升。

总结

HTTP协议在我们日常开发和生活中扮演着举足轻重的角色。HTTP新版本着重性能方面的优化,语义上的改动很少。

随着 WEB 显示的特效,交互增多的发展,人们对交互,显示,用户体验的要求越来越高,这也促使 HTTP 协议的迅速发展。

在为了追求更好地交互与客户体验上,安全,逐渐趋于高速,高用户体验,减少传输延时,故 HTTP 协议的发展逐渐在强化各个方面逐渐进步,逐渐发展。

—END—

推荐

Docker 核心设计理念

Kafka史上最强原理总结

一文带你读懂排序算法(一):冒泡 & 快速选择排序 & 简单插入排序算法

一文带你读懂排序算法(二):希尔排序算法

一文带你读懂排序算法(三):堆排序算法

一文带你读懂排序算法(四):归并算法

一文带你读懂排序算法(五):快速排序算法

一文读懂《Effective Java》第52条:通过接口引用对象

一文读懂《Effective Java》第53条:接口优先于反射机制

一文读懂《Effective Java》第7条:避免使用终结方法

扫描二维码

获取技术干货

后台技术汇

点个“在看”表示朕

已阅

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SIP(Session Initiation Protocol)是一种用于建立、修改和终止多媒体会话的网络通信协议。它是一种轻量级的协议,用于在IP网络上进行语音、视频、聊天和即时通信等多媒体应用的交互。 SIP协议是基于请求-响应模型的,它使用文本格式的消息进行通信。SIP消息分为请求消息和响应消息,请求消息用于请求执行某个动作,而响应消息则是对请求的响应。 SIP的基本功能包括:发起请求建立会话,邀请参与会话的用户,接受或拒绝邀请,修改会话参数,并终止或撤销会话。它允许用户进行注册和注销,以便在网络上发现对方,并提供一系列的功能和服务以增强会话的质量和效果。 SIP协议使用URI(Uniform Resource Identifier)来标识参与会话的用户和资源。它利用一个SIP服务器来处理请求,这个服务器可以进行注册、转发和路由。SIP还可以与其他应用协议如SDP(Session Description Protocol)和RTP(Real-time Transport Protocol)等配合使用,以实现媒体传输和会话控制。 SIP协议的优点在于其灵活性和可扩展性。它允许用户自己定义不同的请求方法和头部字段,以满足各种复杂的通信需求。此外,SIP还支持使用代理服务器和重定向来提高系统的可用性和可靠性。 总之,SIP协议是一种用于建立和管理多媒体会话的通信协议。通过使用请求-响应模型和文本消息格式,SIP实现了用户注册、会话发起、修改和终止等功能,提供了灵活、可扩展和与其他应用协议配合使用的特点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值