Masa / Lino Blog

Masanori Satoh ( Masa / Lino ) の徒然ブログです

パーセントエンコーディングにはまる。

普段Webシステムでの性能試験ではJavaを使って、HTTPリクエストを大量発生させている。
当然リクエストはURLエンコーディングして、使えない文字列を変換している。
# RFC 3986Section 2.1によるとURLエンコードは今パーセントエンコーディングと呼ばれるそうです。
# http://www.studyinghttp.net/uri#Percent-Encoding


ところが、今回のシステムは一部分のみエンコードし、他の部分はエンコードしないという仕組みだった。
こんな感じ。

http://エンコードする&エンコードしない&エンコードする

↑になかなか気づかなかったので、はまった…。
まさかこんな仕組みになっているとは思わなかったし。


しかし、HTML4.01の仕様で以下のように定められているらしい。

注意。古いユーザエージェントの中には、HTMLのURIを、当該文書の文字符号化方法をそのまま適用して処理するものもある。また、古いHTML文書の中にはこうした処理方法に依存しているため、符号変換に際して破綻するようなものもある。そうした古い文書を処理するユーザエージェントは、正当な文字集合の範囲にない文字を含むURIを受け取った場合、まず初めにUTF-8に基づく変換を試みねばならない。そして変換結果が巧く扱えないものである場合のみ、当該文書の文字符号化方法のバイトに基づくURIの変換を試みるようにしなければならない。
http://www.d-toybox.com/studio/lib/uri.htmlより

HTMLは結構あいまいな仕様が多くて、困ることが多いなぁ。