配置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,一经查实,立即删除!

相关文章

asp.net razor html,从控制台应用程序中的ASP.NET Razor模板生成HTML的当前最佳解决方案是什么?...

ServiceStack是用于呈现Razor视图页面的另一个选项。 尽管它已针对集成到ASP.NET或HttpListener Web Host中进行了优化(并提供了用于在目录中自动发现和注册视图页面&#xff0c;即时重新编译修改后的页面等的API)&#xff0c;但它还支持静态生成视图页面 &#xff1a;var razo…

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

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

Xcode缓存数据清除

1. 移除 APP 打包的ipa历史版本(Archives) 不可恢复&#xff0c;就是你打的包&#xff0c;如果需要dysm文件&#xff0c;及时备份 路径&#xff1a;~/Library/Developer/Xcode/Archives 2. 移除对旧设备的支持 可重新生成&#xff1b;再连接旧设备调试时&#xff0c;会重新自动…

IT综合学习网站收集

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

电大计算机网络网考,电大计算机网络(本)学习周期01任务A_0009答案

一、单项选择题(共 20 道试题&#xff0c;共 60 分。)1. ( )和数据通信是计算机网络最基本的两大功能。A. 资源共享B. 病毒管理C. 用户管理D. 站点管理2. 计算机网络系统是由通信子网和( )子网组成的。A. 资源B. 数字C. 信息D. 模拟3. 网络资源子网负责( )。A. 数据通信B. 数字…

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…

PO、VO、DAO、BO、POJO

一、PO :(persistant object )&#xff0c;持久对象 可以看成是与数据库中的表相映射的java对象。使用Hibernate来生成PO是不错的选择。二、VO :(value object) &#xff0c;值对象通常用于业务层之间的数据传递&#xff0c;和PO一样也是仅仅包含数据而已。但应是抽象出的业务对…

计算机网络是将地理知识,计算机网络的基础知识精选.ppt

计算机网络的基础知识精选习题演练 1&#xff0c;WAN的中文含义是()。   A. 局域网   B. 城域网 C. 广域网   D. 增值网 2&#xff0c;LAN的中文含义是()。   A. 局域网 B. 城域网 C. 广域网 D. 增值网 3&#xff0c;MAN的中文含义是()。   A. 局域网   B. 城域网 C…

VBA——Msgbox

MsgBox(prompt[,buttons][,title][,helpfile,context]) 参数说明 prompt - 必需的参数。在对话框中显示为消息的字符串。提示的最大长度大约为1024个字符。 如果消息扩展为多行&#xff0c;则可以使用每行之间的回车符(Chr(13))或换行符(Chr(10))来分隔行。buttons - 可选参数。…

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

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

内存的管理方式

1、内存的区域 对于内存的区域划分上&#xff0c;不同的区域划分上都各有不同。 划分1&#xff1a; 代码区、堆、栈、 全局区&#xff08;静态存储区&#xff09;、 文字常量区、 划分2&#xff1a; 代码段、堆、栈、 data段、BSS段、文字常量区 全局区&#xff1a; 又成为静…

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

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

Scrapy爬虫中的链接提取器LinkExtractor

今天在编写Scrapy爬虫的时候接触到了LinkExtractor&#xff0c;遂学习了一下这个链接提取器。 Link Extractors 是那些目的仅仅是从网页(scrapy.http.Response 对象)中抽取最终将会被follow链接的对象&#xff61;使用场景就是在一个网站中通过自定义规则提取到自己想要的那些网…

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…

C# DatatTable某一列是否有重复判断

public bool HasRepeatData(DataTable dt,string[] colName) { bool flagfalse; DataView myDataView new DataView(dt); if (myDataView.ToTable(true, colName).Rows.Count < dt.Rows.Count) { flag true; } return flag; }转载于:https://www.cnblogs.com/clj0102/p/93…

cordova 项目添加splash启动界面

需求&#xff1a;cordova项目启动添加启动界面&#xff0c;并在设备初始化完成后自动隐藏splash1.新建项目cordova create Mypro com.test.pro proName2.添加平台cd Mypro&#xff08;进入目录&#xff09;cordova platform add androidcordova platform add iOS3.添加splash插…

辽宁大学计算机专业接收调剂,目前有计算机专业调剂通知的学校,不断更新—3月26日更新,新增辽宁大学等...

本帖最后由 yunnyforo 于 2012-3-26 21:16 编辑注&#xff1a;我对研究所关注度不高&#xff0c;关于研究所的调剂通知可能不及时&#xff0c;见谅。大家可以关注中国教育在线考研调剂信息站&#xff1a;http://kaoyan.eol.cn/html/ky/tiaoji/index.shtml&#xff0c;个人感觉这…