URLは大文字と小文字を区別する必要がありますか?


284

きがついた

HTTP://STACKOVERFLOW.COM/QUESTIONS/ASK

そして

http://stackoverflow.com/questions/ask

どちらも正常に機能します-実際には、前のものは小文字に変換されます。

これはユーザーにとって理にかなっていると思います。

Googleを見ると、次のURLは問題なく機能します。

http://www.google.com/intl/en/about/corporate/index.html  

しかし、「ABOUT」のあるものは機能しません:

http://www.google.com/intl/en/ABOUT/corporate/index.html   

URLは大文字と小文字を区別する必要がありますか?


13
私見、URLは大文字と小文字を区別すべきではありません。それは、URLを使用する人々の生活を困難にするだけです。
Muhammad Umer

16
「URLは大文字と小文字を区別する必要がありますか?」という質問 それは意見を呼び起こすので悪い質問です。むしろ、より良い質問は、「URLで大文字と小文字が区別される理由(またはそうでない理由)」、または「URLで大文字と小文字が区別されるのに、他のURLでは区別されない理由」です。
chharvey、2018年

ただし、答えの1つとして、node.jsで採用されているWHATWGの新しいURL標準を確認してください。
chharvey

私の意見では、彼らはそうであってはなりません
Andrew

ブラウザーがこのケースを受け入れない場合、ipfsアドレスは破損しますが、破損はありません
Beeno Tung

回答:


281

W3の「HTMLとURL」によると、次のようにする必要があります

URL、またはURLの一部が存在する場合もありますが、それらは問題ではありませんが、これらの特定は簡単ではない場合があります。ユーザーは常に、URLで大文字と小文字が区別されることを考慮する必要があります。


95
私のガイドラインは、「あなたが受け入れるものに寛大で、あなたが送るものに保守的であること」(IETFが話す)だと思います。
jldupont

9
W3ガイドラインは妥当です。これは単に、送信するURLをサーバーがどのように処理するかを想定してはならないことを示しています。リクエストURLの処理方法はサーバーに依存します。ほとんどのWebサーバーはunix / linuxです。つまり、ほとんどのWebサーバーでは大文字と小文字が区別されます。
oᴉɹǝɥɔ

37
W3は、ユーザーはサーバーで大文字と小文字が区別されると想定する必要があると述べていますが、サーバーについては推奨していません。
トリシス2014

3
回復力のために、URLを解釈するプログラムは、大文字をスキーム名の小文字と同等に扱う必要があります(たとえば、「http」だけでなく「HTTP」も許可します)。 出典
realPK 2016

3
@PK_これは、URLのスキーマ部分にのみ適用されることに注意してください。RFC1738では、URLの他の部分で大文字と小文字を区別するかどうかについては説明されていません。
dthrasher 2016年

126

すべての「インセンシティブ」は読みやすくするために太字になっています。

RFC 4343によれば、ドメイン名は大文字と小文字を区別しませ。残りのURLは、GETメソッドを介してサーバーに送信されます。これは、大文字と小文字が区別される場合とそうでない場合があります。

このページを例にとると、stackoverflow.comはGET文字列/ questions / 7996919 / should-url-be-case-sensitiveを受け取り、HTMLドキュメントをブラウザーに送信します。Stackoverflow.com では、/ QUEStions / 7996919 / Should-url-be-case-sensitiveと同じ結果が生成されるため、大文字と小文字区別さません

一方、ウィキペディアはタイトルの最初の文字を除いて大文字と小文字を区別します。URL https://en.wikipedia.org/wiki/Case_sensitiveivityおよびhttps://en.wikipedia.org/wiki/case_sensitiveivityは同じ記事につながりますが、https://en.wikipedia.org/wiki/CASE_SENSITIVITYは戻ります404。


7
ウィキペディアは、ユーザーが単語を大文字と小文字で区別する必要がある場合に大文字と小文字を区別することを非常に許容していますが、これはOCDのせいで...申し訳ありませんが、その編集者の思いやりのある性質です。ただし、そのURLは技術的に大文字と小文字を区別します。
トリシス2014

14
これは、stackoverflow内の質問のURLの意味的で読みやすい部分では識別されないため、で識別され7996919ます。URLの意味の部分は、SEOの目的のためだけにあります。
user3367701

4
実際には、https: //stackoverflow.com/questions/7996919/should-BLABLA-be-or-NOT-to-beも機能します。これは、stackoverflow.comのサーバーが質問のIDのみを使用してそれを識別し、正しいURLとHTMLページを返すためです。
ボジー

72

ホスティングOSによって異なります。Windowsでホストされているサイトでは、基になるファイルシステムでは大文字と小文字が区別されないため、大文字と小文字が区別されない傾向があります。Unixタイプのシステムでホストされているサイトは、基礎となるファイルシステムで通常大文字と小文字が区別されるため、大文字と小文字が区別される傾向があります。URLのホスト名部分は常に大文字と小文字を区別しません。変化するのはパスの残りの部分です。


1
はい、これはUnix ftpサーバー上のファイルへのhttpリクエストで痛々しいことが判明したためです。
Laurie Stearn

1
HTTPリクエストに応答する唯一の方法はファイルの提供ではないため、一般的な意味で「サーバーに依存している」と言う方が正確です。
Valentin Waeselynck

31

DNSは大文字http://en.example.org/と小文字を無視するため、URLのドメイン名部分は大文字と小文字が区別されません HTTP://EN.EXAMPLE.ORG/。両方とも同じページを開きます。

パスは、要求されたリソースを指定し、おそらく見つけるために使用されます。一部のサーバー、特にMicrosoft Windowsベースのサーバーでは、大文字と小文字が区別されない場合がありますが、大文字と小文字は区別されます。

サーバが大文字と小文字が区別され、場合にhttp://en.example.org/wiki/URL正しいこと、そして、http://en.example.org/WIKI/URLまたはhttp://en.example.org/wiki/urlこれらのURLが有効なリソースに自分自身を指していない限り、HTTP 404エラーページが表示されます。


3
この回答には、「大文字と小文字は区別されますが、大文字と小文字は区別されない」という正しい表現しかありません。有効な回答のみ。
ダニエルW.

@DanFromGermany、パスでは大文字と小文字区別されますここから漠然と推測できます "URLは一般に大文字と小文字が区別されます(マシン名を除く)。大文字と小文字は関係ありませんが、これらは簡単ではないかもしれません。」しかし、それを推測することは曖昧です。上記の1つのコメントで述べたように、RFC1738では、スキーム以外のURLの一部を大文字と小文字を区別するかどうかについては説明していません。URLのどの部分で大文字と小文字が区別されるかを明確にするリンクはありますか?
ガーネット

2
@garnet RFC3986 6.2.2.1から大文字と小文字の正規化URIがジェネリック構文のコンポーネントを使用する場合、コンポーネント構文の同等のルールが常に適用されます。つまり、スキームとホストでは大文字と小文字が区別されないため、小文字に正規化する必要があります。たとえば、URIはとHTTP://www.EXAMPLE.com/同等http://www.example.com/です。 その他の一般的な構文コンポーネントは、スキームで特に定義されていない限り、大文字と小文字が区別されると想定されています。」
Daniel W.

2
@garnetおよびHTTP RFCから:「2つのURIを比較してそれらが一致するかどうかを決定する場合、クライアントはURI全体の大文字と小文字を区別するオクテットごとの比較を使用する必要があります[...]」(スキームを除く)とホスト自体)。
ダニエルW.

15

私は古い記事をぶつけることのファンではありませんが、これはこの特定の問題に対する最初の応答の1つだったので、何かを明確にする必要性を感じました。

@Bhavin Shahの回答では、URLのドメイン部分では大文字と小文字が区別されないため、

http://google.com 

そして

http://GOOGLE.COM 

そして

http://GoOgLe.CoM 

すべて同じですが、ドメイン名の部分以降はすべて大文字と小文字が区別されます。

そう...

http://GOOGLE.COM/ABOUT

そして

http://GOOGLE.COM/about

異なっています。

注:私は多くの場合、「技術的に」であり、「文字通り」ではありません。ほとんどの場合、サーバーはこれらのアイテムを同じように処理するように設定されていますが、同じように処理されないように設定することは可能です。

異なるサーバーはこれを異なる方法で処理し、場合によっては大文字と小文字を区別する必要があります。多くの場合、クエリ文字列値はエンコードされます(クエリ文字列値として渡されるセッションIDまたはBase64エンコードデータなど)。これらのアイテムはその性質から大文字と小文字を区別するため、サーバーはそれらを処理する際に大文字と小文字を区別する必要があります。

したがって、質問に答えるために、サーバーはこのデータを取得する際に大文字と小文字を区別する必要があります。答えは「はい、最も間違いなく」です。

もちろん、すべてが大文字と小文字を区別する必要はありませんが、サーバーはそれが何であるか、およびそれらのケースを処理する方法を認識している必要があります。


@ハート・シマのコメントは基本的に同じことを言っています。投稿する前にそれを逃したので、クレジットが期日までにクレジットを与えたいです。



3

以下を検討してください。

https://www.example.com/createuser.php?name=Paul%20McCartney

この架空の例では、GETメソッドを使用するHTMLフォームが「name」パラメーターを、新しいユーザーアカウントを作成するPHPスクリプトに送信します。

そして、この例で私が指摘している点は、このGETパラメーターは、「McCartney」の大文字を保持するために大文字と小文字を区別する必要があるということです(または、別の例として、「Walter d'Isney」を保持するには、他の方法があります)名前が通常の大文字使用規則に違反する場合)。

スキームとホストは大文字と小文字を区別しないというW3Cの推奨事項を導くのはこのようなケースですが、その後はすべて大文字と小文字が区別される可能性があり、サーバーに委ねられます。標準で大文字と小文字を区別しないと、上記の例では、GETクエリパラメータとして渡されたユーザー入力の大文字と小文字を維持できなくなります。

しかし、私が言いたいのは、これはそのようなケースに対応するための法律の書簡である必要があるが、法律の精神は、ケースが無関係である場合、ケースに依存しない方法で行動するということです。ただし、標準は、大文字と小文字が区別されない場所を特定することはできません。これは、私が示した例のように、状況に依存するものだからです。

(たとえば、アカウントのユーザー名は、大文字と小文字を区別しないように強制するのが最善です。 "User123"と "user123"が異なるアカウントであると、混乱を招く可能性があるためです。

時々それは関連しています、ほとんどの場合それはそうではありません。しかし、これらのことを決定するのはサーバー/ Web開発者に任されなければなりません-そして、標準によって規定することはできません-そのレベルでのみコンテキストを知ることができるからです。

スキームとホストは大文字と小文字を区別しません(これは、大文字と小文字を区別しないという標準の優先順位を示します。残りの部分は、コンテキストをよりよく理解するために、あなたが決定することに任されています。ただし、すでに説明したように、法律上の精神から、正当な理由がない限り、デフォルトでは大文字と小文字を区別しないようにする必要があります。


クエリ文字列は場所の一部として扱われますか?それらは別個のエンティティとして扱われ、位置解決には使用されないと思います。
jpmc26

はい、クエリ文字列は場所とは別です。しかし、ここでクエリパラメータを使用して示したのと同じ原則が、URLの他の部分にも適用できます。たとえば、一部のCMSは、意図的に「/user.php?id=3756」を「/ users / PaulMcCartney」に書き換えて、SEOフレンドリーな人間が読めるURLを作成します(たとえば、Wordpressがこれを行います)。重要なのは、標準がコンテキストに依存するものに対する処方から意図的に後退することです。サーバーがコンテキストを理解するため、サーバーが決定するのはサーバーに任されますが、一般的な標準ではできません。
ボブ

2

URLは、大文字と小文字を区別しないという正当な理由がない限り、大文字と小文字を区別しないでください。

これは必須ではありません(RFCの一部ではありません)が、URLの通信と保存の信頼性が大幅に向上します。

Webサイトに2つのページがある場合:

http://stackoverflow.com/ABOUT.html

そして

http://stackoverflow.com/about.html

それらはどのように違いますか?多分1つは「叫びのスタイル」(大文字)と書かれています-しかし、IAの観点からは、URLの場合の変更によって区別されるべきではありません。

さらに、これをApacheに実装するのは簡単CheckSpelling Onです-mod_Spelingから使用するだけです。


0

古い質問ですが、ここでつまずきました。質問はさまざまな視点を求めており、明確な答えではないので、試してみませんか。

w3cには推奨事項があるかもしれません-私はこれを大いに気にします-質問がここにあるので再考したいと思います。

なぜw3cはドメイン名を大文字と小文字を区別せず、その後大文字と小文字を区別しないと見なすのですか?

根拠は、URLのドメイン部分がユーザーによって手動で入力されたということです。ハイパーテキストになった後のすべては、マシン(ブラウザとサーバーの背面)によって解決されます。

マシンは、人間よりも大文字と小文字の区別を処理できます(技術的な種類ではありません:))。

しかし問題は、マシンがそれを処理できるので、それはそのように行われるべきですか?

つまり、hereIsTheResourcevsにあるリソースに名前を付けてアクセスすることの利点は何hereistheresourceですか?

側面は、読みやすいキャメルケースよりも非常に読みにくいです。人間にも読める(技術的な種類を含む)

だからここに私のポイントがあります:-

リソースパスは、プログラミング構造の途中のどこかにあり、ブラウザーの背後にあるエンドユーザーの近くにある場合があります。

ユーザーがURLに触れたり入力したりすることが予想される場合、URL(ドメイン名を除く)は大文字と小文字を区別しません。ユーザーがパスをできるだけ入力するようにアプリケーションを開発する必要があります。

ユーザーがURLを手動で入力しない場合は、URL(ドメイン名を除く)で大文字と小文字を区別する必要があります。

結論

パスは大文字と小文字を区別する必要があります。私のポイントは、大文字と小文字を区別するパスに重点を置いています。


0

URL文字は16進コードに変換され(URLのスペースが%20として表示されていることに気付いた場合など)、小文字と大文字の16進値が異なるため、URLで大文字と小文字が区別されることは間違いありません。ただし、質問の精神は標準である必要があるようであり、私はノーと言いますが、そうです。エンドユーザーに関係なく機能するようにしたい場合は、開発者/プロバイダーがコードでこれを考慮する必要があります。


これは興味深いものです。通常のe ASCII文字(大文字と小文字がある)は実際には変換されませんか?URLでエスケープされるのはスペースと拡張文字だけです。拡張文字に大文字/小文字の修飾子がありますか?
TygerKrash 2016年

0

これと、仕様で行われていることや言われていないことに関する多くの回答には、質問の要点が欠けていると思います。大文字と小文字を区別する必要がありますか?それは本当に読み込まれた質問です。ユーザーの観点から見ると、大文字と小文字を区別することは難点です。URIをすべきかそうでないべきかという問題は、問題のコンテキストによって異なります。技術的な柔軟性については、そうです。使いやすさのために、彼らはそうであってはなりません。


公平を期すために、「SHOULD」を求める質問は本質的に意見ベースであり、StackOverflowから削除できます。(詳細:stackoverflow.blog/2010/09/29/good-subjective-bad-subjective
chharvey

0

ケース保存

URLは、クライアントとサーバー間で大文字と小文字を区別します。ただし、URLの一部では、サーバーによって、いくつかの理由で大文字と小文字が区別される場合とされない場合があります。

大文字と小文字の区別

次のURLの太字部分は、サイトやサーバーの構成によっては、大文字と小文字が区別される場合あります。

    http:// www。example.com /abc/def.ghi?jkl=mno#pqr

    user @ example.com

根拠

URLの大文字と小文字の区別にはいくつかの用途があります。主に:

  1. 大文字と小文字を区別するファイルシステムとのネイティブな互換性。
  2. シリアル化、ハッシュ、ID、パーマリンク、URL短縮など、URL内のよりコンパクトなデータエンコーディング。

開発者として、上記はより良い方法で処理できることが多いと思いますが、状況によってはこれが許可されない場合があることも理解しています。

たとえば、「GET」URLに多くのデータを配置する必要がある既存の製品を想像してください。ただし、すべての主要なサーバー、ブラウザ、およびキャッシュ/プロキシメカニズムの最大URL長と互換性がある必要があります。中程度の長さのコマンド文字列(一部の古いブラウザーでは1,024文字未満)にも適合させるには、可能な限り一意のURLセーフ文字を使用する必要があります(これは基本的にはbase64urlエンコーディングです)。

理想的な世界で

かどうかURLが必要があり、大文字と小文字を区別議論の余地があること。私は個人的には、そうすべきではないと信じています(より長いURLを作成する可能性がありますが、正確な文字を保持する必要がある場合に簡単に処理できるようにパーセントエスケープがあり、URL以外でデータを転送する方法があります)。 。

使いやすさを向上させるために、多くの人気のあるサイトやサービスで大文字と小文字を区別しないURLが明示的に有効になっているという事実に基づいて、多くの人が同意しているようです。最も顕著な例は、電子メールアドレスのユーザー名の部分です。ほとんどの電子メールプロバイダーは、大文字と小文字、場合によってはドットやその他の記号も無視します( "j.smith@example.com"は "JSMITH@example.com"と同じ)。仕様によると、メールのユーザー名はデフォルトで大文字と小文字が区別されます。

ただし、実際には、私や他の人が望んでいることにも関わらず、これが現在の状態です。そして、大文字と小文字を区別しないURL標準への最終的な世界的な移行は確かに可能ですが、現在、大文字と小文字の区別がさまざまな目的でWeb全体で広く使用されているため、かなり長い時間がかかる可能性があります。

ベストプラクティス

ベストプラクティスに関する限り、ユーザーとしては、ほとんどの状況で小文字に固執し、物事が機能することを期待できます。主な例外は、大文字と小文字をベースにしたエンコードを使用するURL、または同等のファイルシステムのドキュメントパスです。ただし、このような複雑なURLは通常、手動で入力するのではなく、コピーして貼り付けます(または単にクリックします)。

Web開発者は、URLの大文字と小文字をできるだけ区別しないことを検討する必要があります。ただし、上記のように、状況によっては避けられない状況がいくつかあります。


-1

問題は、URLで大文字と小文字が区別されるべきかどうかです。

大文字と小文字を区別するURLの背後に、使用法がないか、良い習慣があると思います。それは愚かな、それは吸うと常に避けられるべきです。

私の意見を裏付けるために、誰かがどのURLを尋ねたときに、URLのどの文字が大文字または小文字であるかをどのように説明できますか?それはナンセンスであり、他に誰もあなたに言うべきではありません。


32
URLが大文字と小文字を区別することには1つの利点があります。オブジェクトがURLを通じて参照できる一意のIDでエンコードされている一部のWebサイトでは、エンコードはbase36ではなくbase64のようになります。これにより、同じ数のURL文字で、より多くの一意のオブジェクトをエンコードできます。たとえば、foo.com / 000-foo.com/zzz(大文字と小文字を区別しない)は、36 ^ 3個の一意のオブジェクトを参照できます。とfoo.com/ZZZは異なるパスです)、62 ^ 3オブジェクトを参照します。
Hart Simha 2013

6
これは答えではなく、意見を述べたコメントです。
ティンマン

1
例を挙げて説明します。URLはコンピュータではなく、人々によって使用されます-元の質問を参照してください。非常に難しいので、リンクが機能しない理由を確認してください。ほとんどすべてのドメインでは大文字と小文字が区別されないため、残りのURLも同様です。反対票は私の声のトーン(悪い)のため、または技術者はユーザーエクスペリエンスよりも技術的な美しさを選ぶ傾向があるためです。
HenriKoppen

1
@theTinManそれは意見を喚起する質問への答えです。
chharvey、2018年

私は@HartSimhaに同意します。質問は意見を求めているため、URLルートの一部が一意のオブジェクトを識別するために使用されていない限り、インターネット上で優れているすべてのものを愛するため、大文字と小文字を区別しないでください。
jaybro

-3

LinuxサーバーでホストされているWebサイトの場合、URLでは大文字と小文字が区別されます。 http://www.google.com/aboutおよびhttp://www.google.com/Aboutは別の場所にリダイレクトされます。Windowsサーバーでは、FOLDERの命名と同様に、URLは大文字と小文字を区別せず、同じ場所にリダイレクトされます。


-6

大文字と小文字を区別しないURLを作成することが可能です

RewriteEngine on
rewritemap lowercase int:tolower
RewriteCond $1 [A-Z]
RewriteRule ^/(.*)$ /${lowercase:$1} [R=301,L]

Google.com..GOOGLE.comなどをgoogle.comにダイレクトする


これは質問の答えにはなりません
monokrome

3
問題は、「URLは大文字と小文字を区別する必要があるか」ということです。あなたの答えは次のとおりです。「大文字と小文字を区別しないURLを作成する方法」
realPK
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.