「Advisory Content-Length for HTTP」と自転車置場の話し

プロトコルの標準化の場では、自転車置き場(Bikeshed)の話がたまに出てきます。そのやり取りが面白かったので、今回新しく出た提案仕様自体の解説にあわせて紹介します。

Advisory Content-Length for HTTP

IETFでHTTP WGの議長も務める Mark Nottingham氏から「Advisory Content-Length for HTTP」という提案仕様が提出されています。

ここで背景としている問題は次のとおりである。HTTPにおけるContent-Lengthヘッダーは、2つの意味で使用されています。1つめは、HTTP/1.1におけるメッセージの終端を示すため。2つめは、メッセージボディ(内容)の長さを示すために使用されます。

HTTP/1.1に置いてメッセージの終端を示すのに使用されていますが、Transfer-Encodingヘッダと合わせて使用しプロキシとバックエンドのサーバで終端の解釈を異なるようにする攻撃があったりします (HTTP Request Smuggling攻撃)。

HTTP/2では、DATAフレーム長を持ってしてメッセージの終端を示すため、Content-Lengthは終端のためには使用されません。ただし、HTTPボディの中身の長さはContent-Lengthと一致していることが要求されます。

このように、プロトコルバージョンや場所によって使い方や解釈が異なる上に、実装にも揺れがあったりします。

そこで、メッセージの終端のためではなく、コンテンツの長さを示す新しいHTTPヘッダを定義しようというのがこの提案仕様です。

初版となる現在のdraft 00では、Bikeshed-Length という名前で仮の名前で定義しています。(ヘッダ値はStructured Field Values for HTTPの定義に則る)

Bikeshed-Length = sh-item

ここで、Bikeshedという単語が出てきました。

自転車置き場(Bikeshed)

自転車置き場(Bikeshed)の解説はこちらのサイトが詳しいです。
0xcc.net

かいつまんで簡単に説明すると、誰しもが口を出しやすい議題、つまり自転車置き場の色をどうするかといった議論です。このような議論は、難しい議論や、重要な議論よりも紛糾してしまうという話です。

そのような紛糾を避けるために、「これはbikeshedの議論だね」とそのような紛糾を諌め、本質的な議論に目を目けるという事がよくあります。

プロトコルの標準化では、やはりパラメータ名・ヘッダ名がこれらに該当しがちです。そのため、提案者であるMark Nottingham氏は、ヘッダ名の議論は置いておいて、この提案の内容の話に集中するためにBikeshed-Lengthと記述したのでしょう。

反応

このBikeshed-Lengthに対して他の人の反応も面白かったので紹介します。

QUIC WGの議長を務めるLucas Pardue氏は次のようにツイートしています
「自転車置き場の色を考慮する必要があるだけでなく、長さにわたって熟考しています」(Google翻訳, tweet url)


また、この自転車置き場(Bikeshed)というフレーズを最初に使ったPoul-Henning Kamp氏もコメントしています
「私は提案されたヘッダー名は完全に素晴らしいと思うし、それを変更する理由はないと思う:-)」(Google翻訳, 投稿URL)