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 つである