2つのURIを比較して一致するかどうかを判断する場合、クライアントは 、次の例外を除いて、URI
全体の大文字と小文字を区別するオクテットごとの比較を使用する必要があります。
上記のHttpRfcの文を読みました。URLでは大文字と小文字が区別されないと思いますが、それが何を意味するのか理解できませんか?
2つのURIを比較して一致するかどうかを判断する場合、クライアントは 、次の例外を除いて、URI
全体の大文字と小文字を区別するオクテットごとの比較を使用する必要があります。
上記のHttpRfcの文を読みました。URLでは大文字と小文字が区別されないと思いますが、それが何を意味するのか理解できませんか?
RFC3986は次のように述べています。
スキームとホストでは大文字と小文字が区別されないため、小文字に正規化する必要があります。たとえば、URI
<HTTP://www.EXAMPLE.com/>
は。と同等<http://www.example.com/>
です。 他の一般的な構文コンポーネントは、スキームで特に定義されていない限り、大文字と小文字が区別されると見なされます。
RFC 2616HTTP
は、スキームの次の比較ルールを定義しています。
2つのURIを比較して一致するかどうかを判断する場合、クライアントは、次の例外を除いて、URI全体の大文字と小文字を区別するオクテットごとの比較を使用する必要があります。
ただし、RFC 7230は、次のように記述してさらにロックダウンします。
スキームとホストは大文字と小文字を区別せず、通常は小文字で提供されます。他のすべてのコンポーネントは、大文字と小文字を区別して比較されます。
これらのルールは通常、クライアント側の比較に適用されます。サーバー側の比較を特に対象としたルールはありません。サーバーがURIをそのコンポーネントに分割すると、同じルールに従ってそれらを処理する必要がありますが、RFCでそれが強制されていることはわかりません。Apacheなどの一部のWebサーバーは、ルールに従います。IISは、Windowsの大文字と小文字を区別しないファイルシステムとの互換性のために、そうではありません。
実際には、Webサーバーに依存します。
IISでは大文字と小文字は区別されません。
Apacheはです。
IISに関する決定は、Windowsファイルシステムで大文字と小文字が区別されないという事実に基づいていると思います。
IISは、要件ではなく推奨事項である必要があるため、仕様のその部分を満たしています。
URIのホスト部分では、大文字と小文字は区別されません。
http://stackoverflow.com
http://StackOverflow.com
上記のいずれかを使用すると、このサイトにアクセスできます。
ホスト部分の後のURIの残りの部分では、大文字と小文字が区別される場合があります。サーバーによって異なります。
Remy Lebeauの回答で述べたように、ルールはクライアント側に設定されています。実際、これは、クライアントソフトウェアが、具体的に指定された部分を除いて、URIのすべての部分に任意の大文字小文字の変更を加えようとしてはならないことを意味します。したがって、たとえばブラウザがページアンカーに相対URLを表示する場合、それがすでにキャッシュにキャッシュされているかどうかを確認する前に、それを小文字に変換しないでください。また、サーバーに投稿するために小文字のURIを使用することもできません。また、大文字と小文字が異なる2つのURIが同じリソースのみを指していると判断するべきではありません(したがって、誤ってトランザクションをスキップし、代わりにキャッシュされた結果を返す可能性があります)。
これは、クライアントがサーバーがURIをどのように扱うかを想定してはならないことを意味します。大文字と小文字を区別しない一部の部分(スキームやホストなど)を処理するためにサーバーが必要です。ただし、それ以外の場合は、大文字と小文字が異なる2つのURIが同じリソースを指しているかどうかを判断するのはサーバー次第です。標準では、この点に関してサーバーに制限を課していません。直接規定されている以外に、「サーバーがすべき」または「サーバーがすべきではない」ということはありません。サーバーがURIで大文字と小文字を区別しないと判断した場合、それはまったく問題ありません。大文字と小文字が区別される場合は、それでも問題ありません。
URLが大文字と小文字を区別するものとして扱われるかどうかは、Webサーバーにも依存します。たとえば、MicrosoftIISサーバーはURLを大文字と小文字を区別するものとして扱いません。
次のURL(Microsoft IISサーバーでホストされている)はどちらも同等として扱われます。
ただし、ApacheサーバーはURLを大文字と小文字を区別するものとして扱い、2つの異なるリソースとして分類されます。
技術的には、Apacheはここで標準に正しく準拠しており、Microsoftは仕様に反対しています…まあ、「古い習慣は一生懸命に死ぬ」と彼らは言います。
ファイルベースのURIの場合、大文字と小文字の区別は、Webサーバーではなく、基盤となるファイルシステムに大きく依存します。Apacheは、Windows(FAT、NTFS)およびmac(HFS)で問題なく動作しますが、Linuxで通常使用されるような大文字と小文字を区別するファイルシステム(extxなど)では動作しませんindex.html
。INDEX.html