Micronaut HTTP/2 支持

2023-03-07 15:04 更新

從 Micronaut 2.x 開始,Micronaut 基于 Netty 的 HTTP 服務(wù)器可以配置為支持 HTTP/2。

為 HTTP/2 配置服務(wù)器

第一步是在服務(wù)器配置中設(shè)置支持的 HTTP 版本:

啟用 HTTP/2 支持

 Properties Yaml  Toml  Groovy  Hocon  JSON 
micronaut.server.http-version=2.0
micronaut:
  server:
    http-version: 2.0
[micronaut]
  [micronaut.server]
    http-version=2.0
micronaut {
  server {
    httpVersion = 2.0
  }
}
{
  micronaut {
    server {
      http-version = 2.0
    }
  }
}
{
  "micronaut": {
    "server": {
      "http-version": 2.0
    }
  }
}

通過此配置,Micronaut 啟用了對(duì) h2c 協(xié)議的支持(請(qǐng)參閱 HTTP/2 over cleartext),這非常適合開發(fā)。

由于瀏覽器不支持 h2c 和一般的 HTTP/2 over TLS(h2 協(xié)議),建議在生產(chǎn)環(huán)境中啟用 HTTPS 支持。對(duì)于開發(fā),這可以通過以下方式完成:

啟用 h2 協(xié)議支持

 Properties Yaml  Toml  Groovy  Hocon  JSON 
micronaut.server.http-version=2.0
micronaut.server.ssl.enabled=true
micronaut.server.ssl.buildSelfSigned=true
micronaut:
  server:
    http-version: 2.0
    ssl:
      enabled: true
      buildSelfSigned: true
[micronaut]
  [micronaut.server]
    http-version=2.0
    [micronaut.server.ssl]
      enabled=true
      buildSelfSigned=true
micronaut {
  server {
    httpVersion = 2.0
    ssl {
      enabled = true
      buildSelfSigned = true
    }
  }
}
{
  micronaut {
    server {
      http-version = 2.0
      ssl {
        enabled = true
        buildSelfSigned = true
      }
    }
  }
}
{
  "micronaut": {
    "server": {
      "http-version": 2.0,
      "ssl": {
        "enabled": true,
        "buildSelfSigned": true
      }
    }
  }
}

對(duì)于生產(chǎn),請(qǐng)參閱文檔的配置 HTTPS 部分。

請(qǐng)注意,如果您的部署環(huán)境使用 JDK 8,或者為了改進(jìn)對(duì) OpenSSL 的支持,請(qǐng)?jiān)?nbsp;Netty Tomcat Native 上定義以下依賴項(xiàng):

 Gradle Maven 
runtimeOnly("io.netty:netty-tcnative:2.0.58.Final")
<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-tcnative</artifactId>
    <version>2.0.58.Final</version>
    <scope>runtime</scope>
</dependency>
 Gradle Maven 
runtimeOnly("io.netty:netty-tcnative-boringssl-static:2.0.58.Final")
<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-tcnative-boringssl-static</artifactId>
    <version>2.0.58.Final</version>
    <scope>runtime</scope>
</dependency>

除了對(duì)適合您的體系結(jié)構(gòu)的本機(jī)庫(kù)的依賴。例如:

配置 Tomcat 本機(jī)

runtimeOnly "io.netty:netty-tcnative-boringssl-static:2.0.58.Final:${Os.isFamily(Os.FAMILY_MAC) ? (Os.isArch("aarch64") ? "osx-aarch_64" : "osx-x86_64") : 'linux-x86_64'}"

有關(guān)詳細(xì)信息,請(qǐng)參閱有關(guān) Tomcat Native 的文檔。

HTTP/2 服務(wù)器推送支持

Micronaut 框架 3.2 中添加了對(duì)服務(wù)器推送的支持。服務(wù)器推送允許單個(gè)請(qǐng)求觸發(fā)多個(gè)響應(yīng)。這最常用于基于瀏覽器的資源。目標(biāo)是改善客戶端的延遲,因?yàn)樗麄儾槐卦偈謩?dòng)請(qǐng)求該資源,并且可以節(jié)省往返時(shí)間。

已創(chuàng)建一個(gè)新接口 PushCapableHttpRequest 來支持該功能。只需將 PushCapableHttpRequest 參數(shù)添加到控制器方法并使用其 API 來觸發(fā)其他請(qǐng)求。

PushCapableHttpRequest 擴(kuò)展了 HttpRequest,因此沒有必要在控制器方法中將兩者都作為參數(shù)。

在觸發(fā)其他請(qǐng)求之前,應(yīng)調(diào)用 isServerPushSupported() 方法以確保該功能可用。一旦知道支持該功能,請(qǐng)使用 serverPush(HttpRequest) 方法觸發(fā)其他請(qǐng)求。例如:request.serverPush(HttpRequest.GET("/static/style.css")))。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)