0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

(調査中) Reactor Nettyで自動追加されるレスポンスヘッダー

Last updated at Posted at 2025-05-11
ヘッダー名 説明
Transfer-Encoding: chunked デフォルトで付与されやすい。レスポンスボディがストリーミング(サイズ不明)だとNettyが自動で追加。
Date HTTP/1.1仕様に基づいてNettyが追加。
Content-Length 明示的に指定すれば付く。しなければ Transfer-Encoding: chunked で代用。
Connection: keep-alive HTTP/1.1ではデフォルトで追加される。明示的に close を指定しない限り。
Content-Type 明示的に設定しない限りは通常付与されない。が、Spring WebFlux 経由だと推定で追加されることがある。
Server: ReactorNetty/xxx Nettyのバージョンによって異なるが、自動で付加される。明示的に削除・変更可能。

Tomcatが Transfer-Encoding: chunked を自動設定する条件

HTTP/1.1で、Content-Length が明示されていない場合
Servletレスポンスで Content-Length を設定しない(または設定できない)と、TomcatはHTTP/1.1の仕様に従って Transfer-Encoding: chunked を自動付加します。

Spring MVC、Spriing FrameworkのWeb Client(+Reactor-Netty)、Tomcatの構成の場合にTransfer-Encoding: chunked の2重設定を防ぐには

・Spriing FrameworkのWeb Client(+Reactor-Netty)で連携先のレスポンスを受け取ったときにContent-Lengthがなかった場合にレスポンスヘッダーにTransfer-Encoding: chunkedを自動付与

・その場合、Spring MVCは、以下のようにTransfer-Encodingをヘッダーを削除する必要がある

// Transfer-Encodingを削除
headers.remove(HttpHeaders.TRANSFER_ENCODING);

その後、tomcatがTransfer-Encoding: chunkedを付与する

tomcatがTransfer-Encoding: chunkedを付与しないようにするには、Content-Lengthを明示的に設定

// Transfer-Encodingを削除
headers.remove(HttpHeaders.TRANSFER_ENCODING);

// Content-Length を明示(chunkedを無効化)
headers.setContentLength(body != null ? body.length : 0);
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?