普段"HTTPヘッダ"と呼んでるものについて、仕様上は "header fields" と呼ぶらしかったり、自分でも整理できていなかった。
今後もHTTP関連の仕様を読んでいく上でも理解しておきたかったので、この記事では、下記の用語について整理していく
- HTTP field
- header/trailer field
- field line
HTTP セマンティクス
まず、参照するドキュメントについて簡単に補足します。今回触れる用語は、HTTPセマンティクスの仕様である「HTTP Semantics(ドラフト版)」で定義されています。
HTTPセマンティクスとは、HTTPメッセージ(HTTPメソッドや、レスポンスコード、フィールド)の意味の定義です。
各HTTP/1.1~HTTP/3の仕様ではこのHTTPメッセージをどのように送るか(例えば、HTTP/2ではストリーム上のフレームで送信する)を定義している。
もともと、HTTPセマンティクスは「RFC7231 HTTP/1.1: Semantics and Content」でHTTP/1.1の仕様の中でフォーマットとあわせて定義されています。しかし、HTTP/1.1の仕様からセマンティクスの定義を抜き出して、HTTP/2~HTTP/3の仕様から参照できるように文書の整理作業が行われている。
それが、先に紹介した「HTTP Semantics(ドラフト版)」です。
それでは見ていきましょう。
用語
HTTP field
HTTP field (フィールド) とはHTTPメッセージやペイロードに関する情報を伝達する、キー/バリューのデータです(HTTPヘッダと言われて思い浮かべるやつです)
後述の header fieldとtrailer fieldを区別しないときに単にfieldと言います。
またkeyをfield name, valueをfield valueと呼びます。
header field, trailer field
HTTPリクエストやHTTPレスポンスといったHTTPメッセージは、下記のような構造を持ちます。
- header section: ボディの前に来るfieldが入る領域
- content: HTTPボディ。POSTリクエストでアップロードするファイルや、HTTPレスポンスのデータ
- trailer section: bodyのあとにfieldが入る領域
header sectionにあるfieldがheader fieldである(または単にヘッダと呼ぶ)。trailer sectionにあるfieldがtrailer fieldである。
あまり知られていない機能ではあるが、HTTPではcontentを送った後にtrailerとしてfieldを送ることができる。ここにくるfieldは一般語としてのヘッダーではないので、header field, trailer fieldと呼び分けることになった。
filed line
また、field line (フィールドライン)というものもある。
これは、HTTP/1.1のように :
でname/valueを区切った表記のことをfield lineと呼ぶ。
用例
trailerを使うことは多くはないと思うし、header fieldを指して単に"ヘッダ"と呼ぶのは問題なさそう。ただヘッダ名、ヘッダ値という言い方は適切ではないかもしれない。
「Structured Field Values for HTTP」のように、header fieldに限定されないような仕様はfieldという言い回しが正しい (実際、この仕様は「Structured Header」から「Structured Field」に改称された)
参考
これらの整理には多くの議論がされています。疑問点や混乱がある方は、下記が参考になる。
- [http-core] Header terminology #111
- What we call "headers"