URI(具体的にはHTTP URL)に1つ以上のスペース文字を含めることは許可されていますか? URLがmustにエンコードされている場合、+
は単に一般的な慣習に従っているのですか、それとも正当な代替手段ですか?
特に、スペースmustを含むURLがエンコードされていることを示すRFCを指すことができますか?
質問の動機: Webサイトのベータテスト中に、スペースを含むURLが作成されたことに注意しました。 Firefoxは正しいことをしているように見えたが、それは私を驚かせた!しかし、これらのURLを修正する必要性を感じるように、開発者にRFCを指示できるようにしたかったのです。
RFC 1738 :
安全でない:
文字は、いくつかの理由で安全でない場合があります。 スペース文字は安全ではありません。URLが転写またはタイプセットされるか、ワープロプログラムの処理を受けると、重要なスペースが消えたり、意味のないスペースが導入される可能性があるためです。文字
"<"
および">"
は、フリーテキストのURLの区切り文字として使用されるため、安全ではありません。一部のシステムでは、引用符("""
)を使用してURLを区切ります。文字"#"
は安全ではなく、その後に続く可能性のあるフラグメント/アンカー識別子からURLを区切るためにWorld Wide Webや他のシステムで使用されるため、常にエンコードする必要があります。文字"%"
は、他の文字のエンコードに使用されるため安全ではありません。ゲートウェイや他のトランスポートエージェントはこのような文字を変更することがあるため、他の文字は安全ではありません。これらの文字は、"{"
、"}"
、"|"
、"\"
、"^"
、"~"
、"["
、"]"
です。 、および"`"
。すべての安全でない文字は、常にURL内でエンコードする必要があります。たとえば、文字
"#"
は、通常はフラグメントまたはアンカー識別子を処理しないシステムでもURL内でエンコードする必要があります。そのため、URLを使用する別のシステムにURLをコピーする場合、 URLエンコードを変更します。
なぜエンコードする必要があるのですか?リクエストは次のようになります。
GET /url HTTP/1.1
(Ignoring headers)
空白で区切られた3つのフィールドがあります。 URLにスペースを入れた場合:
GET /url end_url HTTP/1.1
4つのフィールドがあることがわかっているので、HTTPサーバーはそれが無効な要求であることを通知します。
GET /url%20end_url HTTP/1.1
3フィールド=>有効
注:クエリ文字列(?の後)では、スペースは通常+としてエンコードされます
GET /url?var=foo+bar HTTP/1.1
のではなく
GET /url?var=foo%20bar HTTP/1.1
短い答え:いいえ、スペースをエンコードする必要があります。 it isスペースを+
としてエンコードするのは正しいですが、クエリ文字列のみです。パスでは%20
を使用する必要があります。
URLにはスペース文字を含めることができ、ほとんどのブラウザーで%20として表示されますが、ブラウザーのエンコード規則は頻繁に変更され、ブラウザーがURLをどのように表示するかに依存できません。
したがって、代わりに、URLのスペース文字を、URLをより読みやすく、「きれい」にすると思われる任意の文字に置き換えることができます;)..... O優先される一般的な文字は「-」、「_」、 "+" ....しかし、これらは強制ではないため、URLに既に含まれているはずのない文字を使用できます。
特定のブラウザおよびプラットフォームでエラーが発生する可能性があるため、URL Space Character Replacementとして%、&、}、{、]、[、/、>、<を使用しないでください。
ご覧のとおり、Stakオーバーフロー自体は、スペース(%20)の置換として「-」文字を使用しています。
幸せな質問をしてください。
はい、スペースは通常「%20」にエンコードされます。 URLに渡すパラメーターは、単に安全上の理由からエンコードする必要があります。
URLはnotにスペースを含める必要があります。対処する必要がある場合は、%20
のエンコードされた値を使用してください
スペースを含むURLをエンコードする必要があることを示すRFCを誰かが指すことはできますか?
URI、つまりURLは、RFC 3986で定義されています。
あちらで定義されている文法を見ると、スペース文字が構文的に正当なURLの一部になることは決してないことに気付くでしょう。したがって、「スペースのあるURL」という用語はそれ自体矛盾です。
あなたの質問に答えるために。アプリケーションがURLで使用される値のスペースを置き換えることはかなり一般的だと思います。この理由は、通常、発生するより読みにくいパーセント(URI)エンコーディングを回避するためです。
Percent-encoding に関するこのウィキペディアの記事をご覧ください。
Firefox 3は、URLの%20
sをアドレスバーのスペースとして表示します。