1. ホーム
  2. url

[解決済み] コロン `:` はフレンドリー URL で使用しても安全ですか?

2022-09-03 19:15:29

質問

アプリケーションのセクションをスラッシュで区切られた単語として指定するURLシステムを設計しています。 具体的には、これはGWTにあるので、URLの関連する部分はハッシュになります(これはクライアント側のコントローラ層によって解釈されます)。

http://site/gwturl#section1/section2

セクションによっては追加の属性が必要な場合もあるので、その場合は : で指定し、URL のセクション部分が曖昧にならないようにしたいと思います。 このコードでは、まず / で分割され、次に : のような、このような。

http://site/gwturl#user:45/comments

もちろん、私たちはこれをURLフレンドリーのために行っているので、特別な意味を持つこれらの文字のどれもが、ブラウザや他のシステムによってURLエンコードされ、以下のようなURLにならないようにしたいと思います。

http://site/gwturl#user%3A45/comments <--- BAD

コロンの使い方は、このように セーフ (というのは、ブラウザ、ブックマーク システム、Javascript や Java コードでさえも、自動的にエンコードされないという意味です)。

どのように解決するのですか?

最近 を書きました。 を書いたので、かなり記憶に新しいです。

http://site/gwturl#user:45/comments

の文字はすべて フラグメント部分 ( user:45/comments ) は、完全に合法です。 RFC 3986 の URI として完全に合法です。

の該当箇所は ABNF :

fragment      = *( pchar / "/" / "?" )
pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
pct-encoded   = "%" HEXDIG HEXDIG
sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
                 / "*" / "+" / "," / ";" / "="

これらの制限を除けば、フラグメント部分は、アプリケーションが与える以上の構造を定義していません。 httpというスキームは、この部分をサーバーに送信しないことを述べているだけです。


EDITです。

ドヤッ!

URIの仕様について私が主張したにもかかわらず 議論の余地のない が正しい答えを提供するとき を指摘する。 というのは HTML 4 仕様は要素名/識別子を制限しています。 .

なお、識別子のルールは で変更され、HTML 5 では . URI の制限は引き続き適用されます (執筆時点では、HTML 5 での URI の使用に関して未解決の問題があります)。