`

HTTP/2

 
阅读更多

一, 概念

   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

   

     如何在Apache中启用HTTP/2 ?

 

  五, 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)

 

  • 大小: 98.2 KB
分享到:
评论

相关推荐

    Learning HTTP/2: A Practical Guide for Beginners

    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 最新版 2.8.1

    Best HTTP/2最新版如果你想要一个可以通过 HTTP/2 支持 REST、WebSocket、Socket.IO、SignalR、SignalR Core、Server-Sent Events(以及更多)的自定义请求并且具有开发者定期更新和出色支持功能的现成插件,那么 ...

    Chrome插件HTTP/2 and SPDY indicator

    Chrome插件HTTP/2 and SPDY indicator,安装完毕后访问启用HTTP2的站点,如果地址栏出现蓝色的闪电,说明站点已启用HTTP2.0

    HTTP_2基础教程.pdf

    〔美〕Stephen Ludin〔美〕Javier Garza,罗正龙 郑维智 译 ...上 HTTP/1.1 与 HTTP/2 的性能表现差异,指出了网站迁移到 HTTP/2 需要注意的问题,并在附录 中给出了书中用到的所有资源的列表,方便读者快速上手实践。

    升级nginx支持HTTP/2服务端推送的方法

    **升级Nginx支持HTTP/2服务端推送的方法** HTTP/2是HTTP协议的最新版本,相较于HTTP/1.x,它引入了许多优化,包括服务端推送(Server Push)这一特性。服务端推送允许服务器在客户端请求之前主动发送资源,提高了...

    HttpTwo, 基本的C# http/2 客户端库.zip

    HttpTwo, 基本的C# http/2 客户端库 HttpTwo一个完全管理的C# http/2 客户端库实现这个库的重点是为. NET 带来足够的http/2 功能,以便在 PushSharp环境中通过 http/2 实现 APNS ( Apple推送通知服务) 提供程序 API

    aioh2, 在 python 3 asyncio上,使用超级h2实现 http/2..zip

    aioh2, 在 python 3 asyncio上,使用超级h2实现 http/2. aioh2 http/2 在 python 3 asyncio上使用 hyper-h2 实现。自由软件:BSD许可文档:https://aioh2.readthedocs.org 。特性异步 http/2 客

    c#毕业设计源码下载-nghttp2:nghttp2-HTTP/2C库和工具

    h2-14和http/1.1 ,并且需要TLSv1.2进行HTTP / 2连接。 (HTTP升级和HTTP / 2 Direct) h2c和http/1.1 。 要求 以下软件包是构建libnghttp2库所必需的: pkg-config&gt; = 0.20 要构建和运行单元测试程序

    golang.org x net (内含http2)

    在Golang中,`golang.org/x/net`是一个非常重要的外部库,它包含了各种网络相关的功能,其中就包括对HTTP/2的支持。`http2`子包是专门为处理HTTP/2协议而设计的,它是Golang标准库`net/http`的一个补充。在深入探讨...

    http2讲解.mobi

    《http2讲解》这篇文档会从技术和协议层面介绍HTTP/2协议(RFC 7540),主要内容包括HTTP/2协议产生的背景、协议本身、实现和未来。原作者为Daniel Stenberg。

    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd

    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd

    从旧金山到上海, HTTP-3 非常快!.doc

    HTTP/3 的出现是为了解决 HTTP/2 中的一些问题,包括 TCP 队首阻塞、加密问题、协议的复杂性等。HTTP/3 使用了 QUIC 新协议来代替 TCP 协议,基于 UDP 开发,结合 TLS1.3,带来了 0-RTT 加密传输的可能。 HTTP/3 的...

    http://bd2.gndh111.top/ 篡改主页,专杀工具 hrkill-34(20200509).exe

    解决恶意驱动导致主页篡改为http://bd2.gndh111.top/的问题。 该问题会导致所有浏览器首页为hao123等流氓网址。 该工具是来自火绒杀毒的专杀工具,可以通过论坛联系官方。或者直接这里下载~~

    http://www.dospy.com/bbs/thread-455344-1-7.htmljay

    http://www.dospy.com/bbs/thread-455344-1-7.html

    Alchemy Cygwin 最新版 2/2

    [2/2]共包含2个部分,此为第2部分 第1部分下载地址: http://download.csdn.net/source/2474778 包含使用Alchemy所需的: Perl zip gcc / g++ 版本 setup-version: 2.697 如需下载其他内容,下载镜像请选择: ...

    Componentone Studio 2009 v3 Full Studio for ActiveX2/2

    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 ...

    h2c:Golang HTTP2明文(h2c)处理程序路由器多路复用器

    Golang HTTP / 2明文(h2c)处理程序/路由器/多路复用器 h2c协议是HTTP / 2的非TLS安全版本,无法从net / http获得。 代码是Traefik的h2c服务器的副本,但适用于作为http.Handler的独立使用。 特拉菲克可以在这里...

    Alchemy Cygwin 最新版 1/2

    [1/2]共包含2个部分,此为第1部分 第2部分下载地址: http://download.csdn.net/source/2474802 包含使用Alchemy所需的: Perl zip gcc / g++ 版本 setup-version: 2.697 如需下载其他内容,下载镜像请选择: ...

    Componentone Studio 2009 v3 Full Studio for ActiveX1/2

    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 ...

Global site tag (gtag.js) - Google Analytics