6

URLでRFC2396を読んでいます

多くの URI には、特定の特殊文字で構成された、または特殊文字で区切られたコンポーネントが含まれています。これらの文字は、URI コンポーネント内での使用が予約された目的に限定されるため、「予約済み」と呼ばれます。

しかし、url のクエリ部分 (? と # の間) のセクションには、

3.4。クエリ コンポーネント クエリ コンポーネントは、リソースによって解釈される情報の文字列です。

query         = *uric

クエリ コンポーネント内では、文字「;」、「/」、「?」、「:」、「@」、「&」、「=」、「+」、「,」、および「$」は予約されています。

これらの各文字の「予約済みの目的は何ですか?クエリで &、=、および + が使用されていることは理解していますが、他の文字はどうですか?

より実際には、これらの文字がクエリにあるときは常に URL エンコードする必要がありますか? 私が見たブラウザとサーバーは、 : と ; を処理しています。およびエンコードされていないその他の文字

4

1 に答える 1

6

RFC 2396を廃止するRFC 3986のセクション 2.2 に説明の可能性があると思います。私は引用します:

これらの文字は、一般的な構文、各スキーム固有の構文、または URI の逆参照アルゴリズムの実装固有の構文によって区切り文字として定義される (または定義されない) ため、「予約済み」と呼ばれます。

バーナーズ・リーらのことだと思います。ここに到達しようとしているのは、すべての予約文字が RFC で説明されている一般的な構文で使用されているわけではない場合でも、作成者は、将来のスキームまたは実装固有のコードに十分な自由度を残し、適切と思われる文字を使用できるようにしたかったということです。 .

これらの文字をエンコードする必要があるかどうかについては、標準に準拠したパーセント エンコード アルゴリズムを調査して使用し、非標準のアルゴリズムを使用したり、独自のものを作成したりしないようにする必要があるというのが私の意見です。たとえば、C# や Python などの言語を使用している場合、これらの言語に付属するライブラリには、標準に準拠したアルゴリズムの実装が含まれています。詳細については、RFC 3986のセクション 2.4 で、いつエンコードまたはデコードするかが説明されています。

于 2013-01-23T09:33:11.407 に答える