Tomcat與HTTP/2

前情提要:html

Tomcat高效響應的祕密(一) Sendfile與Gzip
git

Tomcat高效響應的祕密(二) keep alive
github


前面高效響應的兩篇,咱們分析了Sendfile的特性以及HTTP1.1的keep-alive特性,基於這些功能,Tomcat能夠更快速的響應請求。apache

而在keep-alive的特性分析時,咱們發現是服務端與客戶端在keep-alive未超時的時候,一直保持TCP的鏈接,這樣在新的請求到達時就避免了從新握手和斷開鏈接。windows


爲了進一步提高性能,Google率先發起並推出了Spdy,許多主流的瀏覽器都允以支持。最終IETF以此爲參照,提出了HTTP/2的標準。瀏覽器


在減小延遲,加速頁面加載方面,維基百科上有以下描述:tomcat


  • 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   https://github.com/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源碼,分析應用服務器的實現細節,工做原理及與之相關的技術,使用技巧,工做實戰等。起於Tomcat但不止於此。同時會分享併發、JVM等,內容多爲原創,歡迎關注。


掃描或長按下方二維碼,便可關注!

本文分享自微信公衆號 - Tomcat那些事兒(tomcat0000)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索