配置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.pswp.cn/news/397360.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/397360.shtml
英文地址,請注明出處:http://en.pswp.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;個人感覺這…