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