一, 概念
HTTP/2: 超文本传输协议第二版,最初命名HTTP 2.0.
主要基于SPDY协议(是google开发的基于TCP协议,以最小的网络延迟,提升网速,优化用户体验)
二, HTTP 发展史
HTTP/0.9: 1991年发布,极其简单,只有一个命令GET
e.g. GET /index.html /协议规定,服务器只能回应html格式的字符串,服务器发送完就关闭.
HTTP/1.0: 1996年五月发布. 引入了POST和HEAD命令,丰富了互动
请求和回应格式改变,除数据部分,每次通信必须包括头信息,用来描述一些元素
status, authorization, cache, content encoding......
HTTP/1.1: 1997年一月, 引入了持久连接,即TCP连接默认不关闭
HTTP/2: 2015年发布
三, HTTP/2新特性
- 新的二进制格式(Binary Format),HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。
- 多路复用(MultiPlexing),即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面
- header压缩. HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。
- 服务端推送(server push),同SPDY一样,HTTP2.0也具有server push功能。目前,有大多数网站已经启用HTTP2.0,例如YouTuBe,淘宝网等网站,利用chrome控制台可以查看是否启用H2:
四, 如何实现HTTP/2
HTTP/2 的版本标识: 对应URI中的http或https,HTTP/2有2个版本标识
- “h2”对应以”https”开头的URI,表示HTTP/2是运行在TLS之上的,由TLS提供认证和加密等安全保障;
- “h2c”对应以”http”开头的URI,表示HTTP/2是运行在明文TCP之上的。
可通过查看protocol是否采用的是HTTP/2
HTTP2还未被所有浏览器所支持,因此在实施时要支持多种协议并存.
需要Http Server端支持HTTP2协议,据我所知Tengine尚未支持,
已支持的Server列表 https://github.com/http2/http2-spec/wiki/Implementations。
五, JAVA对HTTP/2的支持
java 9已有对此支持,涉及三个类:HTTPClient, HTTPRequest, HTTPResponse
e.g.
HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(new URI("https://labs.consol.de/")) .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandler.asString()); System.out.println(response.statusCode()); System.out.println(response.body());
更多? http://www.linuxidc.com/Linux/2017-10/147686.htm
六, 扩展
1, HTTPS
HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费。
HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密的
HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443
HTTPS可以有效的防止运营商劫持,解决了防劫持的一个大问题
再扩展: 如何把HTTP转HTTPS?
2, SPDY
SPDY的设计是为了解决HTTP的缺陷(每次请求都新建连接等)
SPDY的核心是帧管理层,管理两个端点间的连接和数据的传输.
两个端点间可以有多个数据流
如何启动支持: 启用Apache的 mod_spdy模块,
mod_spdy通过钩子(hook)修改了Apache的默认请求/响应处理过程并添加了SPDY处理。
3, 影响一个HTTP网络请求的因素
1, 带宽
2, 延迟
浏览器阻塞: 浏览器对同一个域名最多同时又4个连接(根据浏览器内核可能有一些差异),
超过最大连接限制,后续请求就会被阻塞
DNS查询: 浏览器需要知道目标服务器IP,才能建立连接,解析IP的系统就是DNS.
建立连接: HTTP 是基于 TCP 协议的,
浏览器最快也要在第三次握手时才能捎带 HTTP 请求报文,达到真正的建立连接,
但是这些连接无法复用会导致每次请求都经历三次握手和慢启动。
三次握手在高延迟的场景下影响较明显,慢启动则对文件类大请求影响较大。
参考: http://web.jobbole.com/87695/
https://www.cnblogs.com/frankyou/p/6145485.html
http://www.sohu.com/a/161201715_714863
http://blog.csdn.net/liujianfei526/article/details/53289350 (发展史,差异)
http://blog.csdn.net/zqjflash/article/details/50179235 (详解)
http://www.cnbeta.com/articles/soft/197468.htm (SDPY)
相关推荐
Learning HTTP/2: A Practical Guide for Beginners by Stephen Ludin English | 15 May 2017 | ASIN: B071Z6YJ6B | 156 Pages | AZW3 | 2 MB What can your organization gain by adopting ...
Best HTTP/2最新版如果你想要一个可以通过 HTTP/2 支持 REST、WebSocket、Socket.IO、SignalR、SignalR Core、Server-Sent Events(以及更多)的自定义请求并且具有开发者定期更新和出色支持功能的现成插件,那么 ...
Chrome插件HTTP/2 and SPDY indicator,安装完毕后访问启用HTTP2的站点,如果地址栏出现蓝色的闪电,说明站点已启用HTTP2.0
〔美〕Stephen Ludin〔美〕Javier Garza,罗正龙 郑维智 译 ...上 HTTP/1.1 与 HTTP/2 的性能表现差异,指出了网站迁移到 HTTP/2 需要注意的问题,并在附录 中给出了书中用到的所有资源的列表,方便读者快速上手实践。
**升级Nginx支持HTTP/2服务端推送的方法** HTTP/2是HTTP协议的最新版本,相较于HTTP/1.x,它引入了许多优化,包括服务端推送(Server Push)这一特性。服务端推送允许服务器在客户端请求之前主动发送资源,提高了...
HttpTwo, 基本的C# http/2 客户端库 HttpTwo一个完全管理的C# http/2 客户端库实现这个库的重点是为. NET 带来足够的http/2 功能,以便在 PushSharp环境中通过 http/2 实现 APNS ( Apple推送通知服务) 提供程序 API
aioh2, 在 python 3 asyncio上,使用超级h2实现 http/2. aioh2 http/2 在 python 3 asyncio上使用 hyper-h2 实现。自由软件:BSD许可文档:https://aioh2.readthedocs.org 。特性异步 http/2 客
h2-14和http/1.1 ,并且需要TLSv1.2进行HTTP / 2连接。 (HTTP升级和HTTP / 2 Direct) h2c和http/1.1 。 要求 以下软件包是构建libnghttp2库所必需的: pkg-config> = 0.20 要构建和运行单元测试程序
在Golang中,`golang.org/x/net`是一个非常重要的外部库,它包含了各种网络相关的功能,其中就包括对HTTP/2的支持。`http2`子包是专门为处理HTTP/2协议而设计的,它是Golang标准库`net/http`的一个补充。在深入探讨...
《http2讲解》这篇文档会从技术和协议层面介绍HTTP/2协议(RFC 7540),主要内容包括HTTP/2协议产生的背景、协议本身、实现和未来。原作者为Daniel Stenberg。
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd
HTTP/3 的出现是为了解决 HTTP/2 中的一些问题,包括 TCP 队首阻塞、加密问题、协议的复杂性等。HTTP/3 使用了 QUIC 新协议来代替 TCP 协议,基于 UDP 开发,结合 TLS1.3,带来了 0-RTT 加密传输的可能。 HTTP/3 的...
解决恶意驱动导致主页篡改为http://bd2.gndh111.top/的问题。 该问题会导致所有浏览器首页为hao123等流氓网址。 该工具是来自火绒杀毒的专杀工具,可以通过论坛联系官方。或者直接这里下载~~
http://www.dospy.com/bbs/thread-455344-1-7.html
[2/2]共包含2个部分,此为第2部分 第1部分下载地址: http://download.csdn.net/source/2474778 包含使用Alchemy所需的: Perl zip gcc / g++ 版本 setup-version: 2.697 如需下载其他内容,下载镜像请选择: ...
2/2 Componentone Studio 2009 v3 Full OS: Win32 | 483 MB Componentone Studio 2009 v3 Full Studio for Mobile http://download.csdn.net/source/1926145 Componentone Studio 2009 v3 Full Studio for iPhone ...
Golang HTTP / 2明文(h2c)处理程序/路由器/多路复用器 h2c协议是HTTP / 2的非TLS安全版本,无法从net / http获得。 代码是Traefik的h2c服务器的副本,但适用于作为http.Handler的独立使用。 特拉菲克可以在这里...
[1/2]共包含2个部分,此为第1部分 第2部分下载地址: http://download.csdn.net/source/2474802 包含使用Alchemy所需的: Perl zip gcc / g++ 版本 setup-version: 2.697 如需下载其他内容,下载镜像请选择: ...
1/2含注册机 Componentone Studio 2009 v3 Full OS: Win32 | 483 MB Componentone Studio 2009 v3 Full Studio for Mobile http://download.csdn.net/source/1926145 Componentone Studio 2009 v3 Full Studio for ...