Quantcast
Channel: rfcタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 193

"HTTPヘッダ"が指すものとは

$
0
0

普段"HTTPヘッダ"と呼んでるものについて、仕様上は "header fields"と呼ぶらしかったり、自分でも整理できていなかった。

今後もHTTP関連の仕様を読んでいく上でも理解しておきたかったので、この記事では、下記の用語について整理していく

  • HTTP field
  • header/trailer field
  • filed 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ヘッダと言われて思い浮かべるやつです)
image.png

後述の header fieldtrailer fieldを区別しないときに単にfieldと言います。

またkeyをfield name, valueをfield valueと呼びます。

header field, trailer field

HTTPリクエストやHTTPレスポンスといったHTTPメッセージは、下記のような構造を持ちます。

image.png

  • header section: ボディの前に来るfieldが入る領域
  • body: HTTPボディ。POSTリクエストでアップロードするファイルや、HTTPレスポンスのデータ
  • trailer section: bodyのあとにfieldが入る領域

header sectionにあるfieldがheader fieldである(または単にヘッダと呼ぶ)。trailer sectionにあるfieldがtrailer fieldである。

あまり知られていない機能ではあるが、HTTPではbodyを送った後にtrailerとしてfieldを送ることができる。ここにくるfieldは一般語としてのヘッダーではないので、header field, trailer fieldと呼び分けることになった。

filed line

また、field line (フィールドライン)というものもある。

これは、HTTP/1.1のように :でname/valueを区切った表記のことをfield lineと呼ぶ。

image.png

用例

trailerを使うことは多くはないと思うし、header fieldを指して単に"ヘッダ"と呼ぶのは問題なさそう。ただヘッダ名、ヘッダ値という言い方は適切ではないかもしれない。

Structured Field Values for HTTP」のように、header fieldに限定されないような仕様はfieldという言い回しが正しい (実際、この仕様は「Structured Header」から「Structured Field」に改称された)

参考

これらの整理には多くの議論がされています。疑問点や混乱がある方は、下記が参考になる
- [http-core] Header terminology #111
- What we call "headers"


Viewing all articles
Browse latest Browse all 193

Trending Articles