TL;DR

いくつかのフィールドをメッセージ本体の後に送りたいときに、どのフィールドを後から送るかを相手に知らせる HTTP のヘッダ。

なぜ必要か

本体を送りながら動的に作られるメタデータは、本体を送り終えるまで値が決まらない。トレーラーを使うと、そうした値を本体の後に付けて送れる。

仕組み

送る側は、先に Trailer ヘッダで後から送るフィールド名を宣言し、本体の後にそのフィールドを送る。トレーラーを使えるのはチャンク形式で送るメッセージ(Transfer-Encoding: chunked)で、リクエストでは TE: trailers を指定する必要がある。

例

Server-Timing をトレーラーとして送るレスポンス。

HTTP/1.1 200 OK
Transfer-Encoding: chunked
Trailer: Server-Timing
 
--- response body ---
Server-Timing: custom-metric;dur=123.4

注意点

  • ブラウザは Server-Timing を除いてトレーラーを無視する。Fetch API や XHR からも読めない
  • Content-Type、Content-Encoding、Content-Length、Authorization、Host などは、トレーラーとして送れない
  • gRPC はトレーラーを多用するが、ブラウザを含む多くの HTTP 実装はトレーラーをサポートしていない。これが gRPC Web が必要な理由の 1 つである

関連

出典