7

WebサーバーがURI比較を行うために、エスケープされた予約されていない文字(alphanumなど)をデコードする必要があることは明らかです。たとえば、http://www.example.com/~user/index.htmはと同じですhttp://www.example.com/%7Euser/index.htm

私の質問は、エスケープされた予約文字をどうするかということです。

例は、、%2Fまたは/です。リクエストURIにが含まれている場合、Webサーバーのパーサーはそれを?%2Fに置き換える必要があります。/上記の例では、それは?http://www.example.com/~user%2Findex.htmと同じになることを意味します。http://www.example.com/~user/index.htmApacheサーバー(2.2.17 Unix)で試してみましたが、「404NotFound」エラーが発生するようです。

つまり%2F、他のエスケープされた予約文字は(少なくともURI比較の前に)そのままにしておく必要がありますか?

背景情報:

RFC 2616(HTTP 1.1)には、エスケープデコードの問題に言及している場所が2つあります。

Request-URIは、セクション3.2.1で指定された形式で送信されます。Request-URIが「%HEXHEX」エンコーディング[42]を使用してエンコードされている場合、オリジンサーバーはリクエストを適切に解釈するためにRequest-URIをデコードする必要があります。サーバーは、無効なR​​equest-URIに適切なステータスコードで応答する必要があります。

「予約済み」および「安全でない」セット(RFC 2396 [42]を参照)以外の文字は、「"%」HEXHEXエンコードと同等です。

http://trac.tools.ietf.org/wg/httpbis/trac/ticket/2によると、 「安全でない」は間違いであり、仕様から削除されます。したがって、ここでは「予約済み」のみを確認しています。)

参考までに、RFC 2396でのそのような文字の定義:

予約済み=";" | "/" | 「?」| ":" | "@" | "&" | "=" | "+" | "$" | "、"

unreserved = alphanum | マーク

マーク="-"| "_" | 「。」| 「!」| "〜" | "*" | "'" |"( "|") "

4

1 に答える 1