プロトコルの標準化の場では、自転車置き場(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と記述したのでしょう。