点击上方蓝字关注我们

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条:避免使用终结方法

扫描二维码

获取技术干货

后台技术汇

点个“在看”表示朕

已阅

一文带你读懂HTTP协议的前世今生相关推荐

  1. DNN、RNN、CNN.…..一文带你读懂这些绕晕人的名词

    DNN.RNN.CNN.-..一文带你读懂这些绕晕人的名词 https://mp.weixin.qq.com/s/-A9UVk0O0oDMavywRGIKyQ 「撞脸」一直都是娱乐圈一大笑梗. 要是买 ...

  2. 一文带您读懂FCC、CE、CCC认证的区别

    一文带您读懂FCC.CE.CCC认证的区别 参考资料:https://3g.k.sohu.com/t/n411629823 FCC认证,CE认证,CCC认证是产品认证中比较常见的几个认证,前两者经常有 ...

  3. 机器学习中为什么需要梯度下降_机器学习101:一文带你读懂梯度下降

    原标题 | Machine Learning 101: An Intuitive Introduction to Gradient Descent 作者 | Thalles Silva 译者 | 汪鹏 ...

  4. 用程序员计算机算进制,一文带你读懂计算机进制

    hi,大家好,我是开发者FTD.在我们的学习和工作中少不了与进制打交道,从出生开始上学,最早接触的就是十进制,当大家学习和使用计算机时候,我们又接触到了二进制.八进制以及十六进制.那么大家对进制的认识 ...

  5. 一文带你读懂“经典TRIZ”

    本文承接上文<一文带第读懂TRIZ>,下面开始看第二个问题:什么是"经典TRIZ"? 很多书里都有对TRIZ的产生与发展的描述. 我个人在看了很多的书和文献以后,认为: ...

  6. 简单一文带你读懂Java变量的作用和三要素

    Java变量的作用 不只是java,在其他的编程语言中变量的作用只有一个:存储值(数据) 在java中,变量本质上是一块内存区域,数据存储在java虚拟机(JVM)内存中 变量的三要素 变量的三要素分 ...

  7. 一文带你读懂感知机的前世今生(上)

    一文带你读懂感知机的前世今生 前言 男女不分 什么是神经元 M-P神经元 全或无定律 McCulloch和Pitts 一种高度简化的模型 MP神经元和真值表 MP神经元的几何理解 后记 参考 前言 男 ...

  8. 《一文带你读懂:云原生时代业务监控》

    点击上方蓝字关注我们! 对业务来说,完备的应用健康性和数据指标的监控非常重要,通过采集准确的监控指标.配置合理的告警机制,我们能够提前或者尽早发现问题,并做出响应.解决问题,进而保证产品的稳定性,提升 ...

  9. au加载默认的输入和输出设备失败_一文带你读懂 C/C++ 语言输入输出流与缓存区...

    (给CPP开发者加星标,提升C/C++技能) 作者:技术让梦想更伟大 / 李肖遥 (本文来自作者投稿) 前言 有没有发现,基本上所有的C语言入门书籍,或者是我们的教程里面,第一个C语言程序实体,都是& ...

最新文章

  1. Oracle维护常用SQL语句
  2. jQuery方法position()与offset()区别
  3. (转载)网络抓包原理及常用抓包工具
  4. 第一章 面向对象编程
  5. 【262】pscp命令 实现windows与linux互传文件
  6. 彻底弄懂dalvik字节码【二】
  7. 字符串2在字符串1中第一次出现的位置strstr()
  8. python批量音频转格式_python将mp3格式批量转化为wav格式
  9. windows server 2008 大量拷贝后释放内存
  10. tomcat7 IP限制配置
  11. 类似纪念碑谷的unity2d素材包_《纪念碑谷》:引领小清新风格的2.5D插画风游戏...
  12. (Giser源数据获取必备)地理空间数据云
  13. 安捷伦数字万用表软件NS-Multimeter,实时数据采集数据自动保存
  14. 2019年学UI设计有前途吗
  15. 关于vue2高德地图使用
  16. 硬核干货Java集合详解
  17. 天猫精灵 python_天猫精灵控制ESP8266(Django+micropython)第一节
  18. 经济危机与金融危机的学术解释与通俗到庸俗的解释,包你明白
  19. 媒体揭露互联网“账号黑市”:百倍暴利
  20. Java文件关闭close语句_java – 关于用于关闭流的close方法()

热门文章

  1. abab的四字成语_关于abab的四字成语大全
  2. 2020-11-22
  3. DAQWare for Digilent AD与Digilent Waveform有何不同?
  4. linux查看网络信息命令
  5. tsc打印机android,使用热敏打印机Android打印条形码
  6. 热乎的滴滴前端面经「现在实习生面试也不简单呀」
  7. java注释搞笑图案_搞笑的代码注释,那些有趣的程序员
  8. dim=0与dim=1_CodingPark编程公园
  9. “米粉”心碎,小米还能继续“高端”吗?
  10. 幼儿园教师计算机运用论文,运用信息技术促进幼儿教师专业成长