转自: https://zhuanlan.zhihu.com/p/21349186

前情提要:

Tomcat高效响应的秘密(一) Sendfile与Gzip

Tomcat高效响应的秘密(二) keep alive

前面高效响应的两篇,我们分析了Sendfile的特性以及HTTP1.1的keep-alive特性,基于这些功能,Tomcat可以更快速的响应请求。

而在keep-alive的特性分析时,我们发现是服务端与客户端在keep-alive未超时的时候,一直保持TCP的连接,这样在新的请求到达时就避免了重新握手和断开连接。

为了进一步提升性能,Google率先发起并推出了Spdy,许多主流的浏览器都允以支持。最终IETF以此为参照,提出了HTTP/2的标准。

在减少延迟,加速页面加载方面,维基百科上有如下描述:

  • Data compression of HTTP headers

  • HTTP/2 Server Push.

  • Pipelining of requests

  • Fixing the head-of-line blocking problem in HTTP 1.x

  • Multiplexing multiple requests over a single TCP connection

我们来试用一样HTTP/2,直观感受一下它的特点。

需要的材料有:

  • 版本要大于 Tomcat 9.0.0 M4

  • OpenSSL

  • 使用OpenSSL生成的证书文件

观察新版本的Tomcat配置文件server.xml,其中包含如下内容:

<!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443 with HTTP/2

This connector uses the APR/native implementation. When using the

APR/native implementation or the OpenSSL engine with NIO or NIO2 then

the OpenSSL configuration attributes must be used.

-->

<!--

<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"

maxThreads="150" SSLEnabled="true" >

<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />

<SSLHostConfig>

<Certificate certificateKeyFile="conf/localhost-rsa-key.pem"

certificateFile="conf/localhost-rsa-cert.pem"

certificateChainFile="conf/localhost-rsa-chain.pem"

type="RSA" />

</SSLHostConfig>

</Connector>

-->

由于HTTP/2只支持在HTTPS中使用,因此证书是必须的,制做证书的原理,各位请自行Google。

在Tomcat中,要配置其支持HTTP/2,需要以下步骤:

  1. 使用openssl,执行如下命令生成证书

openssl genrsa -out server.key 2048

openssl rsa -in server.key -out server.key

openssl req -new -x509 -key server.key -out ca.crt -days 3650

2. 官网下载Native的dll文件,拷贝到c:\windows\System32目录下,以支持Apr Connector

3. 修改server.xml,将支持http2的https Connector配置去掉注释,修改其中对应的证书路径为第一步生成的路径。

<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="150" SSLEnabled="true" >
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig>
<Certificate certificateKeyFile="conf/server.key"
certificateFile="conf/ca.crt"/>
</SSLHostConfig>
</Connector>

4. 重启Tomcat

5. 使用https://localhost:8443访问

6. 查看logs目录下中对应日期的accesslog, 默认情况下,tomcat的配置中默认开启了accesslog ,此时我们发现,请求使用的协议已经是HTTP 2.0

7. 为了观察更加细致,可以配置Tomcat的日志级别,从而输出更加详细的日志。设置org.apache.coyote.http2.level = FINE,关于日志的原理,可以参考之前两篇文章:

Tomcat的Logging

Tomcat的Logging -- 内部实现方式

8. github 下载一个测试的demo GitHub - jfclere/h2_demos

下载后需要在本地执行.sh文件,生成对应的html文件和相应的images。

9. 部署第8步生成的文件到某个特定应用中,或是新建一个空应用将其添加进去,访问这个应用,查看页面对应的执行时间。

通过上面的这些步骤,我们可以更直观的体验一把HTTP/2带来的性能提升。我们后面的文章再分析其实现原理,各位可以先看之前的这篇文章

服务器推送之WebSocket--原理及Tomcat的实现,了解协议的upgrade

在Youtube上,有Tomcat 的commiter 之一 Mark 介绍Tomcat 的Http/2的视频,墙外的朋友可以直接访问该链接:https://www.youtube.com/watch?v=oCFwgMvouis

墙内的朋友,可以回复关键字http2,获取下载地址

相关阅读

Tomcat的Connector组件

Tomcat高效响应的秘密(二) keep alive

Tomcat高效响应的秘密(一) Sendfile与Gzip

服务器推送之WebSocket--原理及Tomcat的实现

Tomcat的Logging

猜你喜欢

  1. 深度揭秘乱码问题背后的原因及解决方式

  2. WEB应用是怎么被部署的?

  3. 怎样调试Tomcat源码

  4. IDE里的Tomcat是这样工作的!

  5. 重定向与转发的本质区别

  6. 怎样阅读源代码

本专栏由曾从事应用服务器核心研发的工程师维护。文章深入Tomcat源码,分析应用服务器的实现细节,工作原理及与之相关的技术,使用技巧,工作实战等。起于Tomcat但不止于此。同时会分享并发、JVM等,内容多为原创,欢迎关注。

推荐关注同名公众号: Tomcat那些事儿

配置Tomcat使用HTTP/2的更多相关文章

  1. mac下安装及配置tomcat

    mac下的软件不像windows下的程序那样写注册表,对于tomcat的安装来说,在mac下是名符其实的绿色软件,具体操作如下: 1.到 apache官方主页 下载完整 tar.gz文件包.(没有专门 ...

  2. 小白 安装和配置Tomcat 局域网内访问网页

    1.官网http://tomcat.apache.org/  ,下载tomcat,解压就好 2.官网www.oracle.com, 下载javaJDK,截图如下,点击黄色荧光笔

  3. IDEA 配置 tomcat的数据源

    1.F4打开module setting面板,找到facets 配置项,这个配置项非常重要,里面可配置tomcat加载的web.xml和context.xml文件所在的路径,部署的时候IDEA会自动读 ...

  4. 解决eclipse配置Tomcat时找不到server选项(Mac通用)

    集成Eclipse和Tomcat时找不到server选项: 按照网上的步骤如下: 在Eclipse中,窗口(window)——首选项(preferences)——服务器(Server)——运行时环境( ...

  5. eclipse配置tomcat 和JRE环境

    配置JRE环境,通俗点讲就是添加一个不同版本的jdk window——preferences——java——installed jres 点击add添加   选择standard VM 选择一个本机正 ...

  6. eclipse配置tomcat出现错误:Could not load the Tomcat server configuration at \Servers\Tomcat v7.0 Server at localhost-config.

    这是eclipse与之前的server配置冲突导致的,最简单的办法就是给Eclipse换个工作目录(Workspace). 步骤: 打开eclipse后,出现下面图片所示的页面,选择其他目录,重新配置 ...

  7. 配置Tomcat使用https协议

    一.  创建tomcat证书 这里使用JDK自带的keytool工具来生成证书: 1. 在jdk的安装目录\bin\keytool.exe下打开keytool.exe 2. 在命令行中输入以下命令: ...

  8. 怎样给Myeclipse配置tomcat服务器

    http://jingyan.baidu.com/article/4853e1e53465271909f72690.html Meclipse是java Web企业级开发中最流行的工具,java we ...

  9. Eclipse中安装配置Tomcat

    Eclipse(4.4.x及以上)中安装配置Tomcat 以下配置说明全部针对免安装版本 基于tomcat的安装目录和运行目录是可以不同的,本文都会进行说明 首先简单介绍一下tomcat的目录结构,一 ...

  10. MyEclipse配置Tomcat开发JavaWeb程序JSP以及Servlet

    1.安装准备 1).下载安装MyEclipse2014,这已经是最新版本. 2).下载Tomcat 官网:http://tomcat.apache.org/ 我们选择8.0: http://tomca ...

随机推荐

  1. leetcode 141. Linked List Cycle 、 142. Linked List Cycle II

    判断链表有环,环的入口结点,环的长度 1.判断有环: 快慢指针,一个移动一次,一个移动两次 2.环的入口结点: 相遇的结点不一定是入口节点,所以y表示入口节点到相遇节点的距离 n是环的个数 w + n ...

  2. Python自动化之form验证二

    class LoginForm(forms.Form): user = fields.CharField() pwd = fields.CharField(validators=[]) def cle ...

  3. PATtest1.3:最大子列和

    题目源于:https://pintia.cn/problem-sets/16/problems/663 题目要求:输入一个数列,求其最大子列和. 问题反馈:1.部分C++代码不是很熟练 2.没有仔细读 ...

  4. 聊聊并发——深入分析ConcurrentHashMap

    术语定义 术语 英文 解释 哈希算法 hash algorithm 是一种将任意内容的输入转换成相同长度输出的加密方式,其输出被称为哈希值. 哈希表 hash table 根据设定的哈希函数H(key ...

  5. 【Unix 网络编程】TCP 客户/服务器简单 Socket 程序

    建立一个 TCP 连接时会发生下述情形: 1. 服务器必须准备好接受外来的连接.这通常通过调用 socket.bind 和 listen 这三个函数来完成,我们称之为被动打开. 2. 客户通过调用 c ...

  6. SharePoint document 右键菜单和【...】菜单不一致的解决办法

    [问题]在sharepoint 2016环境中,当用户只有read权限,访问文档库,会发现文档的右键菜单和[…]菜单的内如是不一致的,而更高权限用户都是一致的. [分析]这个跟微软询问过,是个bug, ...

  7. python-docx操作word文件(*.docx)

    目录 基础操作 对象关系 添加样式 中文字体微软雅黑,西文字体Times New Roman 首行缩进 单独设置标题样式 设置超链接 参考文档 基础操作 from docx import Docume ...

  8. python3爬虫-通过selenium获取到dj商品

    from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.c ...

  9. 大数据入门第七天——MapReduce详解(二)切片源码浅析与自定义patition

    一.mapTask并行度的决定机制 1.概述 一个job的map阶段并行度由客户端在提交job时决定 而客户端对map阶段并行度的规划的基本逻辑为: 将待处理数据执行逻辑切片(即按照一个特定切片大小, ...

  10. 2017-2018-1 20155232 《信息安全系统设计基础》第十周课堂测试(ch06)补交

    # 2017-2018-1 20155232 <信息安全系统设计基础>第十周课堂测试(ch06)补交 上课时完成测试后在提交的时候,没有提交成功,进行补交. 1.下面代码中,对数组x填充后 ...