springboot http2


轉 Spring Boot With Http2 
原文鏈接 http://www.jianshu.com/p/3d7ac535d6a0  

拓展鏈接 http://www.jianshu.com/p/9710585258fb

144 
作者  whthomas  關注
2017.02.07 22:56*  字數 661  閱讀 378 評論 0 喜歡 6

HTTP/2是第二代的HTTP協議,大家可以通過https://http2.akamai.com/demo來感受下Http2的提速。

Spring Boot的web容器選擇中已經有UndertowJetty兩個容器可以支持HTTP/2了,這個例子中我選擇了Undertow作為Spring Boot的web容器。

制作一份證書

雖然Http2沒有強制要求使用TLS,但當前幾乎所有瀏覽器均只支持 HTTP/2 Over TLS。這樣做一方面更安全,另一方面利用 TLS的加密機制可以更好地穿透網絡中間節點。所以在我們模擬一個Http2服務之前,我們需要產生一份本地的Https證書為后面的試驗做准備。

Java自帶了一個密鑰管理工具--keytool,利用這個工具,我們可以產生一份自簽名的證書。

keytool -genkey -alias undertow -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -dname "CN=localhost, OU=localhost, O=localhost, L=hangzhou, ST=zhejiang, C=CN"

執行這條命令之后,在執行命令的目錄下會產生一個keystore.p12PKCS12證書,很快我們就會在Spring Boot中使用到這份證書。

不能落下的ALPN

ALPN是Application Layer Protocol Negotiation的縮寫,是 HTTP/2 的一種協議協商機制:

  1. 客戶端發起請求,只有請求報頭,期望與服務端建立連接。
  2. 服務端如果支持HTTP/2,會返回一個Upgrade請求,與客戶端協商是否切換到HTTP/2。
  3. 當雙方都支持HTTP/2的情況下,HTTP協議會使用HTTP/2,而當出現問題時,則使用HTTP/1.1。

為了讓JVM支持這種機制,需要引入Jettyalpn_boot,並在項目啟動的過程前使用命令:

java -Xbootclasspath/p:<path_to_alpn_boot_jar> ...

對於不同版本的JDK,也需要采用不同版本的alpn_boot,詳情可以參見:http://www.eclipse.org/jetty/documentation/9.4.x/alpn-chapter.html#alpn-versions

啟動一個Http2服務

Http2的這個例子是基於之前undertow的Demo做的,在配置類中務必添加這個配置,來啟用undertow中的Http2功能:

@Bean UndertowEmbeddedServletContainerFactory embeddedServletContainerFactory() {     UndertowEmbeddedServletContainerFactory factory = new UndertowEmbeddedServletContainerFactory();     factory.addBuilderCustomizers(builder -> builder.setServerOption(UndertowOptions.ENABLE_HTTP2, true));     return factory; }

application.properties中添加Https的相關配置:

server.port=8443 server.ssl.key-store={path}/keystore.p12 server.ssl.key-store-password=password server.ssl.keyStoreType=PKCS12 server.ssl.keyAlias=undertow server.ssl.protocol=TLSv1.2

我們編寫一個可以被訪問的Controller:

@RestController @RequestMapping("/test") public class HiController {      @RequestMapping("/hello")     public String hello() {         return "world";     }  }

啟動Application類時,VM的參數中需要記得加入alpn_boot的配置。

此時打開Chrome,訪問https://localhost:8443/test/hello


通過Chrome訪問Http2服務

由於我們產生的證書是自簽名的證書,並不會被瀏覽器認可,所以會被標記成不安全,但是並不影響我們對的TLS使用,通過chrome的插件可以看到網站已經采用了HTTP/2。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM