HTTP协议发展历程
HTTP协议发展历程
HTTP
超文本传输协议是一个用于传输超文本文档的应用层协议,它是为Web
浏览器与Web
服务器之间的通信而设计的,HTTP
协议到目前为止全部的版本可以分为HTTP 0.9
、HTTP 1.0
、HTTP 1.1
、HTTP 2.0
、HTTP 3.0
,其中现在普遍应用的版本是HTTP 1.1
版本,正在推进HTTP 2.0
版本,以及未来的HTTP 3.0
版本。
HTTP 0.9
HTTP 0.9
也被称为单行协议,最初版本的HTTP
协议并没有版本号,后来它的版本号被定位在0.9
以区分后来的版本,HTTP 0.9
极其简单,请求由单行指令构成,以唯一可用方法GET
开头,其后跟目标资源的路径。HTTP 0.9
的响应内容并不包含HTTP
头,这意味着只有HTML
文件可以传送,无法传输其他类型的文件,也没有状态码或错误代码,出现异常时一个特殊的包含问题描述信息的HTML
文件将被响应返回。
特点
- 只有一个请求行,并没有
HTTP
请求头和请求体。 - 服务器没有返回头信息,只返回数据信息。
- 第三个是返回的文件内容是以ASCII 字符流来传输的,因为都是HTML 格式的文件,所以使用ASCII 字节码来传输是最合适的。
HTTP 1.0
HTTP 1.0
构建了可扩展性,为了满足传输多种类型文件的需求,为了让客户端和服务器能更深入地交流,HTTP 1.0
引入了请求头和响应头,它们都是以为Key-Value
形式保存的,在HTTP
发送请求时,会带上请求头信息,服务器返回数据时,会先返回响应头信息。
特点
- 协议版本信息会随着每个请求发送,即
HTTP 1.0
被追加到了GET
行。 - 引入请求头,在发起请求时候会通过
HTTP
请求头告诉服务器它期待服务器返回什么类型的文件、采取什么形式的压缩、提供什么语言的文件以及文件的具体编码。 - 引入响应头,服务器以请求头中信息准备数据,并以响应头的信息告诉客户端数据采用何种格式返回,倘若遇到不支持的格式,只能返回服务器支持的格式,并在响应头中体现,也就是说最终浏览器是以响应头的信息解析数据。
- 引入状态码,状态码会在响应开始时发送,使浏览器能了解请求执行成功或失败,并相应调整行为。
- 引入了缓存机制,通过状态码与
If-Modified-Since
、Expires
等控制更新或使用本地缓存。 - 引入了
Content-Type
头,使HTTP
具备了传输除纯文本HTML
文件以外其他类型文档的能力。
HTTP 1.1
HTTP 1.1
是标准化的协议,HTTP 1.1
消除了大量歧义内容并引入了多项改进。
特点
- 缓存处理,
HTTP 1.1
引入了更多的缓存控制策略,例如Entity tag
、If-Unmodified-Since
、If-Match
、If-None-Match
等更多可供选择的缓存头来控制缓存策略。 - 带宽优化以及网络连接的使用,在请求头中引入了
range
,它允许只请求资源的某一个部分,即返回206
状态码,这样方便了开发者自由选择以便充分利用带宽和链接,并且可以使用Range
和Content-Range
制作断点续传功能。 - 错误通知的管理,在
HTTP 1.1
中新增了24
个错误状态码。 - 增加
Host
请求头,能够使不同域名配置在同一个IP
地址的服务器上。 - 支持长连接,
HTTP 1.1
支持长连接,在一个TCP
连接上可以传输多个HTTP
请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP 1.1
中默认开启Connection:keep-alive
,一般浏览器对于同一个域名允许同时建立6
个长链接。 - 增加管线化技术,允许在第一个应答被完全发送之前就发送第二个请求,以改善队头阻塞问题,但响应的顺序还是会按照请求的顺序返回。
- 支持响应分块,通过设置
Transfer-Encoding: chunked
进行分块响应,允许响应的数据可以分成多个部分,配合服务端尽早释放缓冲可以获得更快的响应速度。
HTTP 2.0
HTTP 2.0
拥有更优异的表现,现网页愈渐变得的复杂,甚至演变成了独有的应用,媒体的播放量,增进交互的脚本大小也增加了许多,更多的数据通过HTTP
请求被传输,由此HTTP 2.0
为网络效率做了大量的优化。
特点
- 二进制分帧,
HTTP 2.0
是二进制协议而不是文本协议,将所有传输的信息分割为更小的消息和帧,并对它们采用二进制格式的编码。 - 多路复用,并行的请求能在同一个链接中处理,在同一域名下所有访问都是从同一个
TCP
连接中走,HTTP
消息被分解为独立的帧,服务端根据标识符和首部将消息重新组装起来,移除了HTTP 1.1
中顺序和阻塞的约束。 - 压缩
header
,header
在一系列请求中常常是相似的,其移除了重复和传输重复数据的成本。 - 服务端推送,服务器可以主动地向客户端推送资源,而无需客户端明确的请求。
HTTP 3.0
HTTP 3.0
目前处于制订和测试阶段,是未来的全新的HTTP
协议,HTTP 3.0
协议运行在QUIC
协议之上,是在UDP
的基础上实现了可靠传输,权衡传输速度与传输可靠性并加以优化,使用UDP
将避免TCP
的队头阻塞问题,并加快网络传输速度,但同样需要实现可靠传输的机制,HTTP 3.0
不是HTTP 2.0
的拓展,HTTP 3.0
将会是一个全新的协议。
每日一题
https://github.com/WindrunnerMax/EveryDay
参考
https://www.cnblogs.com/heluan/p/8620312.html
https://www.lizenghai.com/archives/67621.html
https://juejin.im/post/5ce37660f265da1bb13f05f0
https://www.chainnews.com/zh-hant/articles/401950499827.htm
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP
HTTP协议发展历程的更多相关文章
- JAVA基础知识|HTTP协议-发展历程
HTTP 是基于 TCP/IP 协议的应用层协议.它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口. 此文章为转载内容:http://www.ruanyif ...
- Linux实战教学笔记03:操作系统发展历程及系统版本选择
标签(空格分隔): Linux实战教学笔记-陈思齐 第1章 Linux简介 1.1 什么是操作系统? 简单讲:操作系统就是一个人与计算机硬件的中介. 操作系统,英文名称Operating System ...
- Java的发展历程
Java的发展历程充满了传奇色彩. 最初,Java是由Sun公司的一个研究小组开发出来的, 该小组起先的目标是想用软件实现对家用电器进行集成控制的小型控制装置. 开始,准备采用C++,但C++太复杂, ...
- unix及Linux发展历程
unix及Linux发展历程 版权申明:本文资料为网上收集,由本人整理而成,转载请注明 一,unix诞生: Ken Thompson肯·汤普森 -------- unix之父 在1969年到1970间 ...
- 远程过程调用发展历程 WebAPI GRPC Hprose
作者:马秉尧链接:https://www.zhihu.com/question/23299132/answer/109978084来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...
- 动态 Web Server 技术发展历程
动态 Web Server 技术发展历程 开始接触 Java Web 方面的技术,此篇文章是以介绍 Web server 相关技术的演变为主来作为了解 Java servlet 的技术背景,目的是更好 ...
- 自学工业控制网络之路1.1-工业控制系统发展历程CCS DCS FCS
返回 自学工业控制网络之路 自学工业控制网络之路1.1-工业控制系统发展历程CCS DCS FCS 工业控制系统是对诸如图像.语音信号等大数据量.高速率传输的要求,又催生了当前在商业领域风靡的以太网与 ...
- [Spark]-Spark发展历程与基本概念
Hadoop十年 找了一张Hadoop十年的生态发展图: Spark概况: Apache Spark是一个开源簇运算框架,最初是由加州大学柏克莱分校AMPLab所开发.相对于Hadoop的MapRed ...
- 转载——C# 6.0可能的新特性及C#发展历程
据扯,C# 6.0在不远的将来就发布了,对应的IDE可能是VS 2014(.Net Framework 5.0),因为VS 2013已于2013年10月份发布了,对应的是.Net Franework ...
- 不权威的国产CPU发展历程
最近进行了一些国产化相关工作 趁着周末有时间,自己整理一下这段时间的学习内容. 毕竟不是处理器和芯片的业内人士,里面多有纰漏,请谅解. 希望可以作为入门学习的简单知识. 1.0 远古时代 unix 世 ...
随机推荐
- 幻兽帕鲁 Palworld 私有服务器一键部署教程
<幻兽帕鲁>(日语:パルワールド,英语:Palworld) 是由日本开发商 Pocket Pair 推出的一款动作冒险生存游戏.游戏设定在一个由类似动物的生物 "帕鲁" ...
- [转帖]TiDB-merge region相关问题
一.开启region merge # 控制 Region Merge 的 size 上限,当 Region Size 大于指定值时 PD 不会将其与相邻的 Region 合并 pd-ctl confi ...
- [转帖]一文带你了解mysql sql model的only_full_group_by模式
https://zhuanlan.zhihu.com/p/368440685 Mysql only_full_group_by与Error 1055问题分析 1 声明 本文的数据来自网络,部分代码也有 ...
- [转帖]性能测试工具netperf安装使用
https://blog.51cto.com/dingtongxue1990/1853714 netperf工具使用 一.安装 1,下载 liunx下载地址:ftp://ftp.netperf.org ...
- 【转帖】Linux 系统双网卡绑定 bond的7种模式
第一种模式:mod=0 ,即:(balance-rr) Round-robin policy(平衡抡循环策略)第二种模式:mod=1,即: (active-backup) Active-backup ...
- [转帖]Linux下使用 ipset 封大量IP及ipset参数说明
https://www.cnblogs.com/xiaofeng666/p/10952627.html Linux使用iptables封IP,是常用的应对网络攻击的方法,但要封禁成千上万个IP,如果添 ...
- 【转帖】Linux性能优化(十四)——CPU Cache
一.CPU Cache 1.CPU Cache简介 CPU Cache是位于CPU与内存之间的临时存储器,容量比内存小但交换速度却比内存要快得多.Cache的出现主要是为了解决CPU运算速度与内存读写 ...
- [转贴]CPU设计全流程-以Alpha为例
https://zhuanlan.zhihu.com/p/529872958 1.前言 作为一种超大规模集成电路,CPU在过去几十年里始终遵循摩尔定律--每过十八到二十四个月,硅片单位面积上晶体管数量 ...
- Linux 开启防火墙 避免非干系人误操作的处理
公司里面进行系统集成测试. 不想让开发能够更改我的服务器信息, 但是改密码又太麻烦了. 想了想还是用 防火墙好一些. 第一步 开启防火墙 systemctl enable firewalld syst ...
- open,os模块的常用函数
一.open用于读写文件 1.open的基本语法 : open(file,mode,buffering,encoding,errors.........),open中有如下几个参数,一般情况 下我们只 ...