精华内容
下载资源
问答
  • HTTP2与HTTP1.1的区别

    千次阅读 2018-05-22 13:48:57
    2015年推出的HTTP2较之之前的HTTP1.X有了很多改进的地方,最近看到不少关于HTPP2的介绍的文章,整理了一下写出来,便于自己后期查阅1.HTTP2使用的是二进制传送,HTTP1.X是文本(字符串)传送。大家都知道HTTP1.X使用...

    2015年推出的HTTP2较之之前的HTTP1.X有了很多改进的地方,最近看到不少关于HTPP2的介绍的文章,整理了一下写出来,便于自己后期查阅

    1.HTTP2使用的是二进制传送,HTTP1.X是文本(字符串)传送。

    大家都知道HTTP1.X使用的是明文的文本传送,而HTTP2使用的是二进制传送,二进制传送的单位是帧和流。帧组成了流,同时流还有流ID标示,通过流ID就牵扯出了第二个区别

    2.HTTP2支持多路复用

    因为有流ID,所以通过同一个http请求实现多个http请求传输变成了可能,可以通过流ID来标示究竟是哪个流从而定位到是哪个http请求

    3.HTTP2头部压缩

    HTTP2通过gzip和compress压缩头部然后再发送,同时客户端和服务器端同时维护一张头信息表,所有字段都记录在这张表中,这样后面每次传输只需要传输表里面的索引Id就行,通过索引ID就可以知道表头的值了

    4.HTTP2支持服务器推送

    HTTP2支持在客户端未经请求许可的情况下,主动向客户端推送内容



    HTTP 协议是互联网的基础协议,也是网页开发的必备知识,最新版本 HTTP/2 更是让它成为技术热点。

    本文介绍 HTTP 协议的历史演变和设计思路。


    一、HTTP/0.9

    HTTP 是基于 TCP/IP 协议的应用层协议。它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口。

    最早版本是1991年发布的0.9版。该版本极其简单,只有一个命令GET

    GET /index.html

    上面命令表示,TCP 连接(connection)建立后,客户端向服务器请求(request)网页index.html

    协议规定,服务器只能回应HTML格式的字符串,不能回应别的格式。

    <html>
      <body>Hello World</body>
    </html>

    服务器发送完毕,就关闭TCP连接。

    二、HTTP/1.0

    2.1 简介

    1996年5月,HTTP/1.0 版本发布,内容大大增加。

    首先,任何格式的内容都可以发送。这使得互联网不仅可以传输文字,还能传输图像、视频、二进制文件。这为互联网的大发展奠定了基础。

    其次,除了GET命令,还引入了POST命令和HEAD命令,丰富了浏览器与服务器的互动手段。

    再次,HTTP请求和回应的格式也变了。除了数据部分,每次通信都必须包括头信息(HTTP Header),用来描述一些元数据。

    其他的新增功能还包括状态码(status code)、多字符集支持、多部分发送(multi-part type)、权限(authorization)、缓存(cache)、内容编码(content encoding)等。

    2.2 请求格式

    下面是一个1.0版的HTTP请求的例子。

    GET / HTTP/1.0
    User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5)
    Accept: */*

    可以看到,这个格式与0.9版有很大变化。

    第一行是请求命令,必须在尾部添加协议版本(HTTP/1.0)。后面就是多行头信息,描述客户端的情况。

    2.3 回应格式

    服务器的回应如下。

    HTTP/1.0 200 OK 
    Content-Type: text/plain
    Content-Length: 137582
    Expires: Thu, 05 Dec 1997 16:00:00 GMT
    Last-Modified: Wed, 5 August 1996 15:55:28 GMT
    Server: Apache 0.84
    
    <html>
      <body>Hello World</body>
    </html>

    回应的格式是”头信息 + 一个空行(\r\n) + 数据”。其中,第一行是”协议版本 + 状态码(status code) + 状态描述”。

    2.4 Content-Type 字段

    关于字符的编码,1.0版规定,头信息必须是 ASCII 码,后面的数据可以是任何格式。因此,服务器回应的时候,必须告诉客户端,数据是什么格式,这就是Content-Type字段的作用。

    下面是一些常见的Content-Type字段的值。

    • text/plain
    • text/html
    • text/css
    • image/jpeg
    • image/png
    • image/svg+xml
    • audio/mp4
    • video/mp4
    • application/javascript
    • application/pdf
    • application/zip
    • application/atom+xml

    这些数据类型总称为MIME type,每个值包括一级类型和二级类型,之间用斜杠分隔。

    除了预定义的类型,厂商也可以自定义类型。

    application/vnd.debian.binary-package

    上面的类型表明,发送的是Debian系统的二进制数据包。

    MIME type还可以在尾部使用分号,添加参数。

    Content-Type: text/html; charset=utf-8

    上面的类型表明,发送的是网页,而且编码是UTF-8。

    客户端请求的时候,可以使用Accept字段声明自己可以接受哪些数据格式。

    Accept: */*

    上面代码中,客户端声明自己可以接受任何格式的数据。

    MIME type不仅用在HTTP协议,还可以用在其他地方,比如HTML网页。

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <!-- 等同于 -->
    <meta charset="utf-8" />

    2.5 Content-Encoding 字段

    由于发送的数据可以是任何格式,因此可以把数据压缩后再发送。Content-Encoding字段说明数据的压缩方法。

    Content-Encoding: gzip
    Content-Encoding: compress
    Content-Encoding: deflate

    客户端在请求时,用Accept-Encoding字段说明自己可以接受哪些压缩方法。

    Accept-Encoding: gzip, deflate

    2.6 缺点

    HTTP/1.0 版的主要缺点是,每个TCP连接只能发送一个请求。发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接。

    TCP连接的新建成本很高,因为需要客户端和服务器三次握手,并且开始时发送速率较慢(slow start)。所以,HTTP 1.0版本的性能比较差。随着网页加载的外部资源越来越多,这个问题就愈发突出了。

    为了解决这个问题,有些浏览器在请求时,用了一个非标准的Connection字段。

    Connection: keep-alive

    这个字段要求服务器不要关闭TCP连接,以便其他请求复用。服务器同样回应这个字段。

    Connection: keep-alive

    一个可以复用的TCP连接就建立了,直到客户端或服务器主动关闭连接。但是,这不是标准字段,不同实现的行为可能不一致,因此不是根本的解决办法。

    三、HTTP/1.1

    1997年1月,HTTP/1.1 版本发布,只比 1.0 版本晚了半年。它进一步完善了 HTTP 协议,一直用到了20年后的今天,直到现在还是最流行的版本。

    3.1 持久连接

    1.1 版的最大变化,就是引入了持久连接(persistent connection),即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive

    客户端和服务器发现对方一段时间没有活动,就可以主动关闭连接。不过,规范的做法是,客户端在最后一个请求时,发送Connection: close,明确要求服务器关闭TCP连接。

    Connection: close

    目前,对于同一个域名,大多数浏览器允许同时建立6个持久连接。

    3.2 管道机制

    1.1 版还引入了管道机制(pipelining),即在同一个TCP连接里面,客户端可以同时发送多个请求。这样就进一步改进了HTTP协议的效率。

    举例来说,客户端需要请求两个资源。以前的做法是,在同一个TCP连接里面,先发送A请求,然后等待服务器做出回应,收到后再发出B请求。管道机制则是允许浏览器同时发出A请求和B请求,但是服务器还是按照顺序,先回应A请求,完成后再回应B请求。

    3.3 Content-Length 字段

    一个TCP连接现在可以传送多个回应,势必就要有一种机制,区分数据包是属于哪一个回应的。这就是Content-length字段的作用,声明本次回应的数据长度。

    Content-Length: 3495

    上面代码告诉浏览器,本次回应的长度是3495个字节,后面的字节就属于下一个回应了。

    在1.0版中,Content-Length字段不是必需的,因为浏览器发现服务器关闭了TCP连接,就表明收到的数据包已经全了。

    3.4 分块传输编码

    使用Content-Length字段的前提条件是,服务器发送回应之前,必须知道回应的数据长度。

    对于一些很耗时的动态操作来说,这意味着,服务器要等到所有操作完成,才能发送数据,显然这样的效率不高。更好的处理方法是,产生一块数据,就发送一块,采用”流模式”(stream)取代”缓存模式”(buffer)。

    因此,1.1版规定可以不使用Content-Length字段,而使用“分块传输编码”(chunked transfer encoding)。只要请求或回应的头信息有Transfer-Encoding字段,就表明回应将由数量未定的数据块组成。

    Transfer-Encoding: chunked

    每个非空的数据块之前,会有一个16进制的数值,表示这个块的长度。最后是一个大小为0的块,就表示本次回应的数据发送完了。下面是一个例子。

    HTTP/1.1 200 OK
    Content-Type: text/plain
    Transfer-Encoding: chunked
    
    25
    This is the data in the first chunk
    
    1C
    and this is the second one
    
    3
    con
    
    8
    sequence
    
    0

    3.5 其他功能

    1.1版还新增了许多动词方法:PUTPATCHHEAD、 OPTIONSDELETE

    另外,客户端请求的头信息新增了Host字段,用来指定服务器的域名。

    Host: www.example.com

    有了Host字段,就可以将请求发往同一台服务器上的不同网站,为虚拟主机的兴起打下了基础。

    3.6 缺点

    虽然1.1版允许复用TCP连接,但是同一个TCP连接里面,所有的数据通信是按次序进行的。服务器只有处理完一个回应,才会进行下一个回应。要是前面的回应特别慢,后面就会有许多请求排队等着。这称为“队头堵塞”(Head-of-line blocking)。

    为了避免这个问题,只有两种方法:一是减少请求数,二是同时多开持久连接。这导致了很多的网页优化技巧,比如合并脚本和样式表、将图片嵌入CSS代码、域名分片(domain sharding)等等。如果HTTP协议设计得更好一些,这些额外的工作是可以避免的。

    四、SPDY 协议

    2009年,谷歌公开了自行研发的 SPDY 协议,主要解决 HTTP/1.1 效率不高的问题。

    这个协议在Chrome浏览器上证明可行以后,就被当作 HTTP/2 的基础,主要特性都在 HTTP/2 之中得到继承。

    五、HTTP/2

    2015年,HTTP/2 发布。它不叫 HTTP/2.0,是因为标准委员会不打算再发布子版本了,下一个新版本将是 HTTP/3。

    5.1 二进制协议

    HTTP/1.1 版的头信息肯定是文本(ASCII编码),数据体可以是文本,也可以是二进制。HTTP/2 则是一个彻底的二进制协议,头信息和数据体都是二进制,并且统称为”帧”(frame):头信息帧和数据帧。

    二进制协议的一个好处是,可以定义额外的帧。HTTP/2 定义了近十种帧,为将来的高级应用打好了基础。如果使用文本实现这种功能,解析数据将会变得非常麻烦,二进制解析则方便得多。

    5.2 多工

    HTTP/2 复用TCP连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应,这样就避免了”队头堵塞”。

    举例来说,在一个TCP连接里面,服务器同时收到了A请求和B请求,于是先回应A请求,结果发现处理过程非常耗时,于是就发送A请求已经处理好的部分, 接着回应B请求,完成后,再发送A请求剩下的部分。

    这样双向的、实时的通信,就叫做多工(Multiplexing)。

    5.3 数据流

    因为 HTTP/2 的数据包是不按顺序发送的,同一个连接里面连续的数据包,可能属于不同的回应。因此,必须要对数据包做标记,指出它属于哪个回应。

    HTTP/2 将每个请求或回应的所有数据包,称为一个数据流(stream)。每个数据流都有一个独一无二的编号。数据包发送的时候,都必须标记数据流ID,用来区分它属于哪个数据流。另外还规定,客户端发出的数据流,ID一律为奇数,服务器发出的,ID为偶数。

    数据流发送到一半的时候,客户端和服务器都可以发送信号(RST_STREAM帧),取消这个数据流。1.1版取消数据流的唯一方法,就是关闭TCP连接。这就是说,HTTP/2 可以取消某一次请求,同时保证TCP连接还打开着,可以被其他请求使用。

    客户端还可以指定数据流的优先级。优先级越高,服务器就会越早回应。

    5.4 头信息压缩

    HTTP 协议不带有状态,每次请求都必须附上所有信息。所以,请求的很多字段都是重复的,比如CookieUser Agent,一模一样的内容,每次请求都必须附带,这会浪费很多带宽,也影响速度。

    HTTP/2 对这一点做了优化,引入了头信息压缩机制(header compression)。一方面,头信息使用gzipcompress压缩后再发送;另一方面,客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度了。

    5.5 服务器推送

    HTTP/2 允许服务器未经请求,主动向客户端发送资源,这叫做服务器推送(server push)。

    常见场景是客户端请求一个网页,这个网页里面包含很多静态资源。正常情况下,客户端必须收到网页后,解析HTML源码,发现有静态资源,再发出静态资源请求。其实,服务器可以预期到客户端请求网页后,很可能会再请求静态资源,所以就主动把这些静态资源随着网页一起发给客户端了


    展开全文
  • HTTP2协议规范详述

    千次阅读 2015-02-22 20:33:41
    HTTP2协议规范详述作者:chszs,转载需注明。博客主页:http://blog.csdn.net/chszs2015年2月19日,HTTP协议规范的标准化组织The Internet Engineering Task Force's HTTP Working Group,正式发布了HTTP 2协议。...

    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协议的完整支持。


    展开全文
  • JAVA9 Http2使用

    千次阅读 2017-12-19 19:40:39
    项目结构目录如下图 ...package http2.com.http2.example01;import jdk.incubator.http.HttpClient; import jdk.incubator.http.HttpRequest; import jdk.incubator.http.HttpResponse;import java

    项目结构目录如下图

    项目结构目录

    创建一个测试类 Http2Example01 代码如下

    package http2.com.http2.example01;
    
    import jdk.incubator.http.HttpClient;
    import jdk.incubator.http.HttpRequest;
    import jdk.incubator.http.HttpResponse;
    
    import java.io.IOException;
    import java.net.URI;
    import java.net.URISyntaxException;
    
    /**
     * @author:CrazyShaQiuShi
     * @email:3105334046@qq.com
     * @descript:
     * @version:1.0.0
     */
    public class Http2Example01 {
        public static void main(String[] args) throws URISyntaxException, IOException, InterruptedException {
            HttpClient httpClient = HttpClient.newHttpClient();
            HttpResponse httpResponse = httpClient.send(
                    HttpRequest
                            .newBuilder(new URI("http://transport.opendata.ch/v1/connections?from=Bern&to=z%C3%BCrich&datetime=2017-09-21T17%3A00")
                            ).GET().build(),
                    HttpResponse.BodyHandler.asString()
            );
            int code = httpResponse.statusCode();
            System.out.println(code);
            System.out.println(httpResponse.body().toString());
        }
    }
    

    运行后发现报如下错误

    image.png

    这是由于java9采用模块化,所以你需要在目录中新建一个名称为 module-info.java 的文件。并在该文件中引用相关模块

    添加代码如下

    module  http2{
        requires jdk.incubator.httpclient;
        exports http2.com.http2.example01;
    }

    结果:

    测试结果

    展开全文
  • nginx配置域名启用http2协议

    万次阅读 2019-05-13 22:13:30
    HTTP1.1则在1999年才开始广泛应用于现在的各大...现在基本都主流浏览器都支持HTTP2协议,许多支持HTTPS的网站基本也都启用了HTTP2协议,若我们的域名配置了HTTPS证书,可以在nginx中配置启用HTTP2协议,加速网站响应...

    HTTP1.1则在1999年才开始广泛应用于现在的各大浏览器网络请求中,同时HTTP1.1也是当前使用最为广泛的HTTP协议。HTTP/2在支持HTTP1.1的基础上拓展了, 较之1.1在性能上有着大幅度的提升。现在基本都主流浏览器都支持HTTP2协议,许多支持HTTPS的网站基本也都启用了 HTTP2协议,若我们的域名配置了HTTPS证书,可以在nginx中配置启用HTTP2协议,加速网站响应效率。

     

    一、HTTP 2.0简述

    1、HTTP 2.0简介

    HTTP/2 (原名HTTP/2.0)即超文本传输协议 2.0,是下一代HTTP协议。是由互联网工程任务组IETF)的Hypertext Transfer Protocol Bis (httpbis)工作小组进行开发。是自1999年http1.1发布后的首个更新。HTTP 2.0在2013年8月进行首次合作共事性测试。目前在开放互联网上HTTP 2.0将只用于https://网址,而http://网址将继续使用HTTP 1.1。

    2、HTTP 2.0 优点

    HTTP2.0大幅度的提高了web性能,在HTTP1.1完全语意兼容的基础上,进一步减少了网络的延迟。实现低延迟高吞吐量。对于前端开发者而言,减少了优化工作。有以下优点

    • 二进制分帧
    • 首部压缩
    • 流量控制
    • 多路复用
    • 请求优先级
    • 服务器推送

    二、前提条件

    1、openssl的版本必须在1.0.2e及以上,在 Chrome 51后,谷歌去掉了对 NPN 的支持,HTTP2不能用了会证书错误,而openssl1.0.2e之后的版本修复了此问题

    2、开启https加密,目前http2.0只支持开启了https的网站

    3、nginx的版本必须在1.9.5以上,原因是nginx从1.9.5开始,已经用 http_v2_module 模块替换了 ngx_http_spdy_module

    三、准备openssl

    1、查看openssl

    $ openssl version 查看是否安装了openssl,安装了如下,且1.0.2k大于e

    2、安装openssl

    若没安装或者版本低于1.0.2e,去下载安装

    下载 $ wget https://www.openssl.org/source/openssl-1.0.2r.tar.gz
    解压 $ tar zxvf openssl-1.0.2r.tar.gz
    进入 $ cd openssl-1.0.2r
    配置 $ ./config
    编译 $ make 
    安装 $ make install

    3、更新openssl

    由于是源码编译安装,若之前安装过,openssl相关命令配置不会自动更新,需手动更新

    备份旧的命令 

    $ mv /usr/bin/openssl /usr/bin/openssl.old
    $ mv /usr/include/openssl /usr/include/openssl.old

    添加软连接
    $ ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
    $ ln -s /usr/local/ssl/include/openssl /usr/include/openssl

    写入openssl库文件的搜索路径
    $ echo "/usr/local/ssl/lib" >> /etc/ld.so.conf

    使修改后的搜索路径生效 
    $ ldconfig

    重新查看openssl版本$ openssl version

    若openssl已经安装且版本大于1.0.2e,以上操作可省略

    四、修改nginx配置

    1、查看nginx版本

    $ /usr/local/openresty/nginx/sbin/nginx -V

    nginx version: openresty/1.13.6.2
    built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) 
    built with OpenSSL 1.0.2k-fips  26 Jan 2017
    TLS SNI support enabled
    configure arguments: --prefix=/usr/local/openresty/nginx --with-cc-opt=-O2 
    --add-module=../ngx_devel_kit-0.3.0 --add-module=../iconv-nginx-module-0.14 
    --add-module=../echo-nginx-module-0.61 --add-module=../xss-nginx-module-0.06 
    --add-module=../ngx_coolkit-0.2rc3 --add-module=../set-misc-nginx-module-0.32 
    --add-module=../form-input-nginx-module-0.12 
    --add-module=../encrypted-session-nginx-module-0.08 --add-module=../ngx_postgres-1.0 
    --add-module=../srcache-nginx-module-0.31 
    --add-module=../ngx_lua-0.10.13 --add-module=../ngx_lua_upstream-0.07 
    --add-module=../headers-more-nginx-module-0.33 
    --add-module=../array-var-nginx-module-0.05 --add-module=../memc-nginx-module-0.19 
    --add-module=../redis-nginx-module-0.3.7 --add-module=../rds-json-nginx-module-0.15 
    --add-module=../rds-csv-nginx-module-0.09 
    --add-module=../ngx_stream_lua-0.0.5 --with-ld-opt=-Wl,-rpath,/usr/local/openresty/luajit/lib 
    --with-http_realip_module 
    --with-http_stub_status_module --with-http_ssl_module 
    --with-http_gzip_static_module --with-stream --with-stream_ssl_module

    看是否安装了with-http_v2_module,这里看到没有安装要安装

    http_ssl_module看到已经安装了,若没有安装也要安装下

    2、重新编译nginx

    1、添加ngx_http_v2_module同时要带上原来的参数

    $ ./configure --prefix=/usr/local/openresty --with-cc-opt=-O2 \
    --with-http_realip_module \
    --with-http_v2_module \
    --with-http_stub_status_module \

    --with-http_ssl_module \
    --with-http_gzip_static_module \
    --with-stream \
    --with-stream_ssl_module \
    --with-luajit

    若要更新openssl加上

    --with-openssl=/usr/local/ssl \ 

    重新编译注意事项:

    1、--prefix=/usr/local/openresty,是配置安装路径,而不是--prefix=/usr/local/openresty/nginx

    2、要添加--with-luajit,重新配置luajit,不然启动nginx找不到libluajit-5.1.so.2,还得手动去添加

    3、带有--add-module的模块无需带上,编译时openresty会自动添加

    2、接下来$ make 编译,注意不要执行make install安装了,这样会覆盖原来的安装

    3、备份原来的nginx二进制文件,以免出错时便于回退

    $ cp /usr/local/openresty/nginx/sbin/nginx /usr/local/openresty/nginx/sbin/nginx.bak

    4、用新编译的nginx替换掉旧的nginx

    $ cp  /opt/soft/openresty-1.13.6.1/build/nginx-1.13.6/objs/nginx  /usr/local/openresty/nginx/sbin/nginx

    5、查看添加是否成功

    $ /usr/local/openresty/nginx/sbin/nginx -V

    nginx version: openresty/1.13.6.2
    built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) 
    built with OpenSSL 1.0.2k-fips  26 Jan 2017
    TLS SNI support enabled
    configure arguments: --prefix=/usr/local/openresty/nginx 
    --with-cc-opt='-O2 -O2' 
    --add-module=../ngx_devel_kit-0.3.0 
    ................. 
    --with-ld-opt=-Wl,-rpath,/usr/local/openresty/luajit/lib 
    --with-http_realip_module 
    --with-http_v2_module 
    --with-http_stub_status_module 
    --with-http_ssl_module 
    --with-http_gzip_static_module 
    --with-stream 
    --with-stream_ssl_module

    可以看到 http_v2_module模块以已经添加成功

    6、配置nginx.conf

     server {
     	listen       80;
            listen 443 ssl http2; #增加http2
            server_name www.uwsxxx.com;
            #开启ssl并添加证书
            ssl on;
            ssl_certificate cert/nginx_uws.pem;
            ssl_certificate_key cert/nginx_uws.key;
            ssl_session_timeout 5m;
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
            ssl_prefer_server_ciphers on;
            
            access_log /usr/local/openresty/nginx/logs/access.log combined;
            
            location / {
                     proxy_set_header Host $host:$proxy_port;
                     proxy_set_header   X-Real-IP   $remote_addr;
                     proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
                     proxy_pass http://uws02:7867;
    
                     proxy_redirect http:// $scheme://;
                	 if ( $server_port = 80 ){
                        rewrite ^(.*) https://$server_name$1 permanent;
                 	 }
    
            }
    }
    

    7、重启nginx

    $ /usr/local/openresty/bin/openresty -s reload 加载配置无效,必须停止后重新启动

    必须先停止 $ /usr/local/openresty/bin/openresty -s stop

    再重启启动 $ /usr/local/openresty/bin/openresty 

    8、查看生效 

    在chrome浏览器地址栏中输入我们的域名:https://www.uwscloud.com 访问,然后再输入chrome://net-internals/#http2 查看启用了http2的域名,可以看到配置的域名已经出现了

    参考:http://nginx.org/en/docs/http/ngx_http_v2_module.html

    参考:https://www.cnblogs.com/tinywan/p/7860774.html

    展开全文
  • Okhttp对http2的支持简单分析

    万次阅读 2017-08-04 18:43:08
    Okhttp http2
  • Http2 http2 引入了不兼容的new binary framing layer, 所以大版本号增加了 除非使用tcp socket,否则看不出http的版本区别 基于SPDY SPDY google在2009年弄的项目,最大的目标是减少 减低网页加载延迟,通过解决...
  • Springboot启动https和http2

    万次阅读 2019-11-17 14:13:15
    在Spring Boot中启动HTTPS和HTTP2 将javalsj.jks复制到Spring Boot应用的resources目录下 在application.properties中配置证书及端口,密码填写第3步中的密码 ##################################---Undertow...
  • wireshark http2抓包

    千次阅读 2017-04-21 13:15:25
    如今http2越来越流行,为了更好的分析http2,有必要抓包,当然,浏览器上的工具也可以查看http2(比如,chrome的审查元素,网络标签页就可以查看网络请求),但想要更深入的研究就需要wireshark了。 chrome 审查...
  • 1,nghttp2和nginx 名字比较像,但是是一个c的llib库。... 也可以做代理服务器,支持ssl。 之前也做过测试了 ...因为nginx 是不支持 upstream 的http2 转发请求的。 而且nginx 也没有计划开发这个。 而haproxy
  • Java对HTTP2的支持

    万次阅读 2018-07-02 14:15:28
    说到Java对HTTP2的支持情况,实质上包含两个部分。一个就是Java对TLS 1.2及其ALPN扩展的支持情况,另一个就是Java对HTTP2客户端、服务器的编程支持情况。 1. Java对TLS 1.2及其ALPN扩展的支持 1.1 Java 6 初始时...
  • HTTP2简介和基于HTTP2的Web优化

    千次阅读 2018-10-25 19:08:25
    时值公司全面切换到HTTPS和HTTP/2,讨论HTTP/2有了更现实的意义。以前也断断续续看了些文章,做了些了解,这里算作一个学习和总结吧。 本文定位入门级别,分作两大块: HTTP/2是什么 基于HTTP/2前端可以做什么...
  • Tomcat实现http2的配置

    千次阅读 2018-09-04 00:02:14
    Tomcat apr模式访问: (因为Jdk8不支持对ALPN...)实现http2配置要么Jdk10的环境下配置相关证书可以实现对Http2的实现或者通过openssl实现证书结合apr的方式进行相应的配置。本例子,将通过配置Apr实现对htt...
  • 如何使用Nginx服务开启HTTP2

    千次阅读 2020-08-18 19:50:44
    如何使用Nginx服务开启HTTP2 首先在Nginx配置文件中配置 proxy_cache_path cache levels=1:2 keys_zone=my_cache:10m; server { listen 80 default_server; listen [::]:80 default_server; server_name test....
  • HTTP2二进制协议

    千次阅读 2018-06-08 18:58:25
     与Http1.x(文本协议)不同,Http2是一个二进制协议,体现在10种不同类型的二进制帧上。 为什么使用二进制协议? 性能。二进制协议的解析效率超高,几乎没有解析代价; 带宽。二进制协议没有冗余字段,占用带宽...
  • jmeter支持http2协议请求

    千次阅读 2018-02-28 21:32:20
    前言:最近有小伙伴问到jmeter怎么发送http2协议的请求,虽然现在http1.1是主流,只有少数几家大厂用到h2协议,但还是研究了下,做个准备,说不定哪天就用上了。进入正题。1.为jmeter安装 HTTP/2 Sampler采样器插件...
  • 今天发布了HttpCanary2.0版本,除了修复了部分bug以及优化性能外,最主要的是支持了HTTP2协议。 HttpCanary是什么?Android平台第二强大的HTTP抓包和注入工具,不了解的同学可以阅读下关于HttpCanary的介绍:juejin....
  • 继续echo web框架,今天搞一下http2HTTP2What is HTTP/2? HTTP/2 is a replacement for how HTTP is expressed “on the wire.” It is not a ground-up rewrite of the protocol; HTTP methods, status co
  • http1.1和http2的主要区别

    千次阅读 2019-04-24 00:56:42
    HTTP/2(超文本传输协议第2版,最初命名为HTTP 2.0),是HTTP协议的的第二个主要版本,使用于万维网。HTTP/2HTTP协议自1999年HTTP 1.1发布后的首个更新,主要基于SPDY协议(是Google开发的基于TCP的应用层协议,用...
  • Android OkHttp3使用http2问题记录

    千次阅读 2016-07-15 12:55:54
    Android Okhttp3使用http2.0协议的接口时,发现一个问题,打印错误Log E/NativeCrypto: ssl=0xd25d4000 cert_verify_callback x509_store_ctx,Google上没有查到相关的信息,毕竟现在http2用的还很少。经查看Android...
  • 注:本文不涉及具体的概念,只探究他们之间的关系 ...http2:第二代http协议,相较于HTTP1.x,大幅度的提升了web性能。在与HTTP/1.1完全语义兼容的基础上,进一步减少了网络延迟和传输的安全性,基于TCP。 websock...
  • 你该用HTTP2

    千次阅读 2019-05-29 23:08:06
    HTTP版本简史 HTTP/0.9: (1991年)基于GET请求的文本传输协议 ... (1994年)安全的HTTP传输协议 ...HTTP/1.0: ...(1996年)增加HTTP头、扩展PUT、POST等方法 ...HTTP/1.1: ...(1999年)长连接、流水线...HTTP/2: (2...
  • http2协议的wireshark抓包方法

    千次阅读 2018-01-26 15:13:21
    根据中大学业要求,要抓个http2的包来玩玩。但直接下个最新版的wireshark是抓不到http2的包的。 因为在被解密之前,http2的包会被wireshark识别为tcp协议,因此用http2过滤器一点用都没有。 网上的教程各种胡吹,...
  • nginx配置http2无效不起作用

    千次阅读 2017-03-17 18:02:01
    最近博客打算做https顺便把http2也做上去,但是测试的时候发现还是http/1.1,问题出来哪里? nginx -V 查看编译参数也带有 –with-http_v2_module 默认情况下http_v2_module是自动带着的Google 了一下发现是 OpenSSL ...
  • 【技术点】Http/Https/Http2

    万次阅读 2020-06-11 11:36:53
    HTTP协议的数据,基本上可以说是裸奔的,用抓包工具很容易的发现HTTP包里面的数据。为了安全起见,自然就有人出来解决这个问题,对于数据安全或者说网络安全问题,主要是要解决下面几个事情: 窃听风险...
  • http2协议之多路复用

    千次阅读 2018-07-31 12:00:20
    http2多路复用解决的问题,由于浏览器的限制访问网站资源的时候浏览器在同一个域名下最多开启6个线程,这样如果前几个线程执行比较慢的任务或者需要等待服务器端响应,后面的资源就被阻塞住了 .以往的做法是把静态资源...
  • nginx启用对HTTP2的支持

    千次阅读 2017-02-19 18:20:32
    nginx启用HTTP2特性 查看当前nginx的编译选项 #./nginx -V nginx version: nginx/1.9.15 built by gcc 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4) built with OpenSSL 1.0.2g 1 Mar 2016 TLS SNI ...
  • ngixn异常 net::ERR_HTTP2_PROTOCOL_ERROR 200

    千次阅读 2020-07-16 14:01:50
    再描述下现象:不是一个接口报上面的错误,多个接口多次调用都会偶现上面的问题:net::ERR_HTTP2_PROTOCOL_ERROR 200 所以基本断定不是单个接口 或 数据库的问题,因为我们用了四台nginx做负载均衡和转发,所以基本...
  • 计算机网络之HTTP、HTTPS、HTTP2

    千次阅读 2019-06-12 18:30:37
    HTTP 协议,是 Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。 HTTP 是一个无状态的协议。无状态是指客户机(Web 浏览器...
  • 昨天一个网友通过QQ联系我,说按照我博客之前分享的http2配置教程不能生效,想请我帮忙看看。 经过测试,使用谷歌浏览器访问他的测试站点,确实没有开启http2,但他的配置和编译参数都正确的,这有点奇怪了。 不过...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,184,432
精华内容 473,772
关键字:

http2