前情提要: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,須要如下步驟:
使用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,關於日誌的原理,能夠參考以前兩篇文章:
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高效響應的祕密(一) Sendfile與Gzip
猜你喜歡
本公衆號由曾從事應用服務器核心研發的工程師維護。文章深刻Tomcat源碼,分析應用服務器的實現細節,工做原理及與之相關的技術,使用技巧,工做實戰等。起於Tomcat但不止於此。同時會分享併發、JVM等,內容多爲原創,歡迎關注。
本文分享自微信公衆號 - Tomcat那些事兒(tomcat0000)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。