配置Tomcat使用HTTP/2

转自: 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. 使用访问


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的视频,墙外的朋友可以直接访问该链接:

墙内的朋友,可以回复关键字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那些事儿

编辑于 2016-06-14

转载于:https://www.cnblogs.com/xifenglou/p/9394948.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397360.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过NSNotification来监听键盘弹出和弹回

在通知中心建立一个广播来监听键盘的弹出和弹回&#xff0c;在监听事件中加入触发事件的一些操作。 [[NSNotificationCenter defaultCenter]addObserver:self selector:selector(keyboardWillChange:) name:UIKeyboardWillChangeFrameNotification object:nil];[[NSNotificatio…

IT综合学习网站收集

最近整理了一下曾经使用过的IT从入门到广泛的综合类基础学习网站&#xff0c;记录下来&#xff0c;以便初学者使用&#xff1a; 1.http://www.w3school.com.cn/ 中文版基础在线学习平台 2.http://www.runoob.com/ 中文版基础在线学习平台&#xff08;和W3类似&#xff09; 3.h…

mac安装gdb及为gdb进行代码签名

1. 安装gdb GDB作为一个强大的c/c调试工具&#xff0c;一直是程序猿们的良好伴侣&#xff0c;但转到Mac os才发现竟然没有默认安装&#xff0c;所幸还有强大的homebrew工具&#xff1a; brew install homebrew/dupes/gdb然后就是漫长的等待编译安装时间了&#xff0c;安装完成后…

Python学习---Django的基础操作180116

Django创建数据库操作 django流程之model实例 settigs.py&#xff1a;更改Django2.0.1的配置&#xff0c;更新为之前的路径配置 DIRS: [os.path.join(BASE_DIR, templates)], # 设置templates的路径为Django以前版本 # DIRS: [], # 注释掉该行&#xff0c;此为Django 2.0…

订阅Jenkins的邮件列表,获取最新的信息

进入https://jenkins.io/content/mailing-lists/ 点击感兴趣的话题 选择【archive】跳转到谷歌讨论组 最后&#xff0c;点击左上角的【Subscribe】即可加入Google Groups 备注&#xff1a;其实谷歌讨论组是一个很好用的东西&#xff0c;每个人都可以上去建&#xff0c;对于集成…

英语四六级和计算机二级是一,大学里最难考证书排名,四六级和计算机根本排不进前三...

大学是我们提高自身技能最好的一个时期&#xff0c;除了平时的课程和一些社团活动之外&#xff0c;还有一件最最必不可少的事情&#xff0c;那就是考证&#xff0c;而这也是为我们以后工作打好基础&#xff0c;为自己多准备一些敲门砖。我国各个行业都有属于自己的证书&#xf…

Fedora 安装后需要做的第一件事

一直以来&#xff0c;Red Hat 系的许多教程&#xff0c;都会建议你关闭 SELinux。确实&#xff0c;启用 SELinux 可能会造成许多莫名其妙的错误。但在实际生产环境&#xff0c;甚至是用户工作站&#xff0c;Red Hat 都建议将 SELinux 设为 enforcing 模式&#xff0c;因为它在关…

html文件怎么导出stl文件,各种3D建模软件导出STL文件的小技巧(一)

很多用户在提交3D模型文件的时候&#xff0c;常常有这样的困惑&#xff1a;什么是STL 格式文件&#xff0c;怎么获取STL 格式文件呢&#xff1f;STL 格式文件是在计算机图形应用系统中&#xff0c;用于表示三角形网格的一种文件格式。它也是3D打印机在执行3D打印程序时&#xf…

angularjs 中的scope继承关系——(2)

转自&#xff1a;http://www.lovelucy.info/understanding-scopes-in-angularjs.html angularjs 中的scope继承关系 ng-include 假设在我们的 controller 中&#xff0c; $scope.myPrimitive 50; $scope.myObject {aNumber: 11}; HTML 为&#xff1a; <script type&quo…

Android界面菜单(4)—快捷菜单

2019独角兽企业重金招聘Python工程师标准>>> 快捷菜单 当用户点击界面上某个元素超过2秒后&#xff0c;将启动注册到该界面的快捷菜单。 步骤&#xff1a; 1.代码动态生成菜单 final static int CONTEXT_MENU_1 Menu.FIRST;final static int CONTEXT_MENU_2 Menu…

Echarts地图编写

1.引入echarts库文件 <script charset"utf-8" type"text/javascript" language"javascript" src"echarts-2.2.7/doc/example/www/js/echarts.js"></script> 2.在页面中新建div用于地图展示 <div id"main" st…

威海职业学院计算机专业宿舍,2021年威海职业学院新生宿舍条件和宿舍环境图片...

每年高考结束后&#xff0c;威海职业学院新生被录取同学们陆续都到校报到~而宿舍作为同学们朝夕相处之场所&#xff0c;如果不懂相处之道&#xff0c;难免会摩擦不断&#xff0c;更有甚者堪比宫斗大戏。所以各位大学新生一定要珍惜室友之间的友情&#xff0c;彼此处好关系。本文…

计算机专业录取分数及大学排名,计算机专业录取分数最高的大学有哪些?附排名前50大学名单...

高考结束之后&#xff0c;不少即将迎接高考的家长对于很多专业的录取情况都抱有很大的兴趣&#xff0c;都比较关心自己的理想专业大概能上哪些大学。今天&#xff0c;小编将为大家以山东高考计算机专业各大学录取分数进行排名&#xff0c;供下一届高考生参考。计算机专业作为近…

letsencrypt 自动续期不关闭nginx

为什么80%的码农都做不了架构师&#xff1f;>>> 已失效 corntab -e 5 0 1 * * /opt/letsencrypt/letsencrypt-auto --config /etc/letsencrypt/webroot.ini -d <domain> certonly && sudo service nginx reload/etc/letsencrypt/webroot.ini rsa-key…

loss低但精确度低_低光照图像增强网络-RetinexNet(model.py解析【2】)

论文地址&#xff1a;https://arxiv.org/pdf/1808.04560.pdf代码地址&#xff1a;https://github.com/weichen582/RetinexNet解析目录&#xff1a;https://zhuanlan.zhihu.com/p/88761829整个模型架构被实现为一个类&#xff1a;class lowlight_enhance(object):其构造函数实现…

添加dubbo xsd的支持

使用dubbo时遇到问题&#xff1a; org.xml.sax.SAXParseException: schema_reference.4: Failed to read schema document http://code.alibabatech.com/schema/dubbo/dubbo.xsd, because 1) could not find the document; 2) the document could not be read; 3) the root ele…

byte数组穿换成pcm格式_形象地介绍DSD的编解码原理及和PCM的区别

一直有人不清楚DSD到底是啥原理&#xff0c;和MP3, FLAC, APE, WAV等基于PCM编码技术的音频格式又有啥区别。特意做了两张图说明一下。图一是是由很多黑点构成的蒙娜丽莎头像&#xff0c;点击看大图就知道是没有灰阶只有黑白两色。但是人眼是可以看到有丰富的灰阶的。这和DSD一…

UBUNTU : Destination Host Unreachable

介绍我的系统的搭建的方式: WIN7 64 VMWARE STATION&#xff0c;方式是进行桥接的方式。最近突然出现了问题&#xff0c;Ubuntu ping 外网或者 PING WIN 7 的时候&#xff0c;出现 Destination Host Unreachable 的错误&#xff1b;想着去修改网卡的链接形式&#xff1a; 编辑…

怎么把分开的pdf放在一起_糖和盐混在一起了要怎么分开?| 趣问万物

趣 问 万 物来源&#xff1a;把科学带回家撰文&#xff1a;Mirror如何分离糖和盐&#xff1f;图源&#xff1a;Pixabay小手一抖&#xff0c;不小心把糖(蔗糖)和盐(氯化钠)混在一块儿了该怎么办&#xff1f;趁着光棍节&#xff0c;就让我们吃饱了撑着研究研究把糖和盐拆散的N种方…

《JavaScript DOM编程艺术》笔记

1. 把<script>标签放到HTML文档的最后&#xff0c;<body>标签之前能使浏览器更快地加载页面。 2. nodeType的常见取值 元素节点(1) 属性节点(2) 文本节点(3) 3. <a href"http://www.baidu.com" οnclick"popUp(this.href);return false;"&g…