HTTP2协议规范详述

简介: 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/43908785 HTTP2协议规范详述作者:chszs,转载需注明。
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/43908785

HTTP2协议规范详述

作者:chszs,转载需注明。博客主页:http://blog.csdn.net/chszs

2015年2月19日,HTTP协议规范的标准化组织The Internet Engineering Task Force's HTTP Working Group,正式发布了HTTP 2协议。HTTP协议工作组实际上发布了两个相关的规范:

1)HTTP/2协议
2)HPACK

HPACK是HTTP/2协议Header部分的压缩规范。

HTTP/2协议规范的制定工作是从2012年开始的,是为了响应Google的SPDY协议而制定。

HTTP/1.x协议最大的问题是使用了多个连接来并行地载入资源,因为当客户端和服务器之间使用单个连接来请求网页所需的多种不同的对象(图片、CSS以及JavaScript等)时,这些对象必须按顺序依次传输,一个接一个。如果某个对象需要花很多时间才能完成传输,那么就可能占据大量的服务器的创建时间,而其后的对象都必须等待。
这导致了大多数HTTP/1.x连接仅被用于请求单个的对象。Web客户端根据需求并行地载入它们需要的对象,以至于不得不要求服务器创建多个连接。这使得服务器的开销巨大:它耗光了额外的网络资源,占据了额外的处理时间,而且客户端与服务器之间的每一个连接都需要数个往返通信。

HTTP/2协议直接解决了这个问题。在HTTP/2协议中,在单个TCP连接上,客户端和服务器之间是全双工的数据流的多路复用。每一个流都可以携带一对请求/响应,客户端向服务器发起多个请求时只需使用多路复用即可。而且,所有的数据流彼此是相互独立的。如果某个数据流很慢,HTTP/2连接可以继续传输其它数据流的数据。同样地,客户端可以请求某个很大的对象,再请求某个小对象,那么小对象的响应可能先返回,大对象的响应可能需一段时间后才得到响应。在HTTP/2协议中,无需HTTP/1.x协议的等待和顺序处理。HTTP/2协议规范建议客户端和服务器都需要支持在单个连接上传输至少100种不同的数据流。

HTTP/2协议还有其它的性能和功能方面的改进。传统的HTTP/1.x协议是一个文本协议,其请求和响应都使用了可读的纯文本格式。而HTTP/2协议是一个二进制协议,它把请求和响应拆分成了不可读的顺序帧,在TCP连接上传输。HTTP/2协议还允许服务器直接推送数据流到客户端,无需客户端发起最初的请求。

作为一个二进制协议,HTTP/2协议没有改变HTTP连接的底层语义。每一个请求和响应都仍然包括Header部分和Body部分,Header部分通常用于标识Body部分的元数据信息。不过,HTTP/2协议在表示同样的消息设计时更富有效率。

HTTP/2协议在很大程度上基于了Google的SPDY协议而制定,但是有一些SPDY协议的特性在HTTP/2协议中没有采纳。HTTP/2协议还是需要TLS(Transport Layer Security,传输层安全)来增强隐私和安全。HTTP/2协议在这方面是可选的,既可以在TLS上传输,又可以在纯TCP上传输。但是,目前业界有部分HTTP/2协议的服务提供商宣称自己只支持加密TLS连接的HTTP/2通信,以便保护用户的隐私。

SPDY协议最初在双向传输上还使用了gzip来压缩Header部分。但是在2012年,gzip在Header部分的使用被发现是很危险的,它在遭受攻击时很容易暴露用户的隐私,从而导致犯罪。随后SPDY协议做了改变,停止了gzip压缩的使用。HTTP/2协议规范的第二部分解决了这个问题:HPACK。

HPACK是一种压缩HTTP/2连接的Header部分的方法,可以有效地避免用户隐私的泄露。与gzip不同,HPACK是一种面向通用目标的压缩算法,以满足HTTP/2协议的需求。
随着IETF签署通过了HTTP/2协议,接下来HTTP/2协议将由RFC正式发布。

可以预见,未来各浏览器都将很好地支持HTTP/2协议,Google最新的Chrome 40版将包含对HTTP/2协议的支持,并且Google宣称在2016年年初将会从Chrome浏览器中移除对SPDY协议的支持。这也预示着SPDY协议的寿命在明年将会走到尽头。Mozilla浏览器宣布,Firefox 36版将会支持HTTP/2协议的第14版草案,在Firefox 37或38版将会支持到HTTP/2协议的第16版草案,再往后的版本将会完全支持HTTP/2协议。微软的Windows 10操作系统的技术预览版也包含了对HTTP/2协议的第14版草案的支持,其新的浏览器项目Spartan将会完全替代IE浏览器,提供对HTTP/2协议的完整支持。


目录
相关文章
|
19天前
|
数据采集 存储 JSON
从零到一构建网络爬虫帝国:HTTP协议+Python requests库深度解析
【7月更文挑战第31天】在网络数据的海洋中,使用Python的`requests`库构建网络爬虫就像探索未知的航船。HTTP协议指导爬虫与服务器交流,收集信息。HTTP请求包括请求行、头和体,响应则含状态行、头和体。`requests`简化了发送各种HTTP请求的过程。
45 4
|
28天前
|
缓存 网络协议 算法
从零开始掌握HTTP协议:全面详解1.0、1.1和2.0
大家好!我是小米,今天带大家深入探讨互联网基础——HTTP协议。从HTTP/1.0到HTTP/1.1,再到HTTP/2.0,它们是如何发展的,解决了哪些问题,有哪些显着区别?通过这这篇文章,你将全面了解这些协议的变革和优化,掌握关键技术点,提升开发效率。快来一起学习吧!
46 1
|
2月前
|
安全 网络协议 网络安全
IP代理的三大协议:HTTP、HTTPS与SOCKS5的区别
**HTTP代理**适用于基本网页浏览,简单但不安全;**HTTPS代理**提供加密,适合保护隐私;**SOCKS5代理**灵活强大,支持TCP/UDP及认证,适用于绕过限制。选择代理协议应考虑安全、效率及匿名需求。
|
14天前
|
域名解析 缓存 网络协议
揭秘DNS协议:从'http://www.example.com'到IP地址的奇幻旅程,你不可不知的互联网幕后英雄!
【8月更文挑战第4天】在互联网的广袤空间里,每台设备都有唯一的IP地址,但记忆这些数字组合并不直观。因此,DNS(域名系统)作为关键桥梁出现,将易记的域名转换为IP地址。DNS协议工作于应用层,支持用户通过域名访问资源。DNS系统包含多级服务器,从根服务器到权威服务器,共同完成域名解析。查询过程始于客户端,经过递归或迭代查询,最终由权威服务器返回IP地址,使浏览器能加载目标网页。
46 12
|
10天前
|
网络协议
Web基础与HTTP协议
【8月更文挑战第10天】
22 2
|
10天前
|
API 开发者 微服务
RPC和 HTTP协议
【8月更文挑战第8天】RPC(远程过程调用)使程序能像本地调用般请求远程服务,简化网络通信细节。其优点包括高效的数据传输及严格的类型定义,适合微服务间的高效通信。HTTP(超文本传输协议)则是用于万维网数据传输的通用协议,以文本为基础,易于理解和调试,并被广泛支持。两者各有侧重,RPC偏高速服务通信,HTTP则更适用于多样化的网络场景。选择时需根据具体需求决定。
|
19天前
|
缓存 网络协议 算法
(二)Java网络编程之爆肝HTTP、HTTPS、TLS协议及对称与非对称加密原理!
作为一名程序员,尤其是Java程序员,那必须得了解并掌握HTTP/HTTPS相关知识。因为在如今计算机网络通信中,HTTP协议的作用功不可没,无论是日常上网追剧、冲���、亦或是接口开发、调用等,必然存在HTTP的“影子”在内。尤其对于WEB开发者而言,HTTP几乎是每天会打交道的东西。
45 10
|
20天前
|
数据采集 JSON API
HTTP协议实战演练场:Python requests库助你成为网络数据抓取大师
【7月更文挑战第30天】在网络数据抓取中,Python的`requests`库凭借其简洁的API和强大功能脱颖而出。首先确保已通过`pip install requests`安装库。实战演练包括:发送GET请求获取数据(如`requests.get(url)`),处理JSON响应(利用`.json()`方法解析),添加请求头以绕过反爬虫机制(如设置`User-Agent`),以及发送POST请求提交数据。掌握这些技能的同时,务必遵守法律法规和网站政策。
41 6
|
20天前
|
数据采集 网络协议 API