Должен ли URL-адрес учитывать регистр?

Я заметил, что

HTTP://STACKOVERFLOW.COM/QUESTIONS/ASK

и

http://stackoverflow.com/questions/ask

как работает - на самом деле предыдущий преобразуется в нижний регистр.

Я думаю, что это имеет смысл для пользователя.

если я посмотрю на Google, то этот URL-адрес отлично работает:

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

но этот с " О " не работает:

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

должен ли URL-адрес учитывать регистр?

13 ответов



все "нечувствительный"С boldened для удобочитаемости.

доменные имена case нечувствительный по данным RFC 4343. Остальная часть URL-адреса отправляется на сервер с помощью метода GET. Это может касаться регистра или нет.

возьмите эту страницу, например, stackoverflow.com получает получить строку / questions/7996919 / should-url-be-case-sensitive, отправка HTML-документа в браузер. Stackoverflow.com is case нечувствительный потому что он дает тот же результат для / QUEStions/7996919 / Should-url-be-case-sensitive.

с другой стороны, Википедия чувствительна к регистру, за исключением первого символа заголовка. Адреса https://en.wikipedia.org/wiki/Case_sensitivity и https://en.wikipedia.org/wiki/case_sensitivity приводит к той же статье, но https://en.wikipedia.org/wiki/CASE_SENSITIVITY возвращает 404.


зависит от ос хостинга. Сайты, размещенные в Windows, как правило, нечувствительны к регистру, поскольку базовая файловая система нечувствительна к регистру. Сайты, размещенные в системах типа Unix, как правило, чувствительны к регистру, поскольку их базовые файловые системы обычно чувствительны к регистру. Часть имени хоста URL-адреса всегда нечувствительна к регистру, это остальная часть пути, которая изменяется.


часть имени домена URL-адреса не чувствительна к регистру, так как DNS игнорирует регистр: http://en.example.org/ и HTTP://EN.EXAMPLE.ORG/ оба открывают одну и ту же страницу.

путь используется для указания и, возможно, поиска запрошенного ресурса. Он чувствителен к регистру, хотя некоторые серверы, особенно на базе Microsoft Windows, могут рассматривать его как нечувствительный к регистру.

если сервер чувствителен к регистру и http://en.example.org/wiki/URL правильно, то http://en.example.org/WIKI/URL или http://en.example.org/wiki/url отобразит страницу ошибки HTTP 404, если только эти URL-адреса указывают на сами допустимые ресурсы.


Я не любитель натыкаться на старые статьи, но поскольку это был один из первых ответов на этот конкретный вопрос, я почувствовал необходимость что-то прояснить.

как @Bhavin Shah answer заявляет, что доменная часть url-адреса нечувствительна к регистру, поэтому

http://google.com 

и

http://GOOGLE.COM 

и

http://GoOgLe.CoM 

все одинаковы, но все После части доменного имени считается чувствительным к регистру.

так...

http://GOOGLE.COM/ABOUT

и

http://GOOGLE.COM/about

разные.

примечание: Я говорю "технически", а не" буквально " во многих случаях, на самом деле, серверы настроены для обработки этих элементов одинаково, но их можно настроить так, чтобы они не обрабатывались одинаково.

разных серверах по разному это делают, а в некоторых случаях они должны быть чувствительны к регистру. Во многих случаях значения строки запроса кодируются (например как идентификаторы сеанса или данные в кодировке Base64, переданные как значение строки запроса) эти элементы чувствительны к регистру по своей природе, поэтому сервер должен быть чувствителен к регистру при их обработке.

поэтому, чтобы ответить на вопрос, "Должны ли" серверы учитывать регистр при захвате этих данных, ответ: "да, определенно."

конечно, не все должно быть чувствительным к регистру, но сервер должен знать, что это такое и как с ними обращаться случаи.


комментарий@Hart Simha в основном говорит то же самое. Я пропустил его, прежде чем я разместил, поэтому я хочу дать кредит, где кредит должен.


посмотрите на спецификацию здесь: раздел 2.7.3 http://tools.ietf.org/html/draft-ietf-httpbis-p1-messaging-25#page-19

схема и хост нечувствительны к регистру и обычно предоставляются в нижнем регистре; все остальные компоненты сравниваются с учетом регистра манера.


URL-адреса должны быть нечувствительны к регистру, если нет веской причины, по которой они не должны быть.

Это не обязательно (это не какая-либо часть RFC), но это делает связь и хранение URL-адресов гораздо более надежными.

Если у меня есть две страницы на сайте:

http://stackoverflow.com/ABOUT.html

и

http://stackoverflow.com/about.html

как они должны отличаться? Возможно, один из них написан "кричащий стиль" (шапки), но с точки зрения IA, различие никогда не должно быть сделано изменение в случае URL-адреса.

кроме того, это легко реализовать в Apache - просто используйте CheckSpelling On от mod_Speling.


старый вопрос, но я споткнулся здесь, так почему бы не выстрелить в него, так как вопрос ищет различную перспективу, а не окончательный ответ.

w3c может иметь свои рекомендации , которые мне очень важны , но я хочу переосмыслить, так как вопрос здесь.

почему w3c считает доменные имена нечувствительными к регистру и оставляет что-либо после этого нечувствительным к регистру ?

Я думаю, что обоснование заключается в том, что доменная часть URL-адреса набирается вручную пользователь. Все после того, как гипертекст будет разрешен машиной (браузер и сервер в задней части).

машины могут отрегулировать нечувствительность случая лучшую чем люди (не технический вид:)).

но вопрос только в том, что машины могут справиться с этим, должно ли это быть сделано таким образом ?

Я имею в виду, каковы преимущества именования и доступа к ресурсу, сидящему на hereIsTheResource vs hereistheresource ?

боковая сторона очень нечитабельна чем верблюд случай один, который более читаем. Читаемый для людей (включая технический вид.)

Итак, вот мои очки: -

путь к ресурсам падает где-то в середине структуры программирования и иногда находится рядом с конечным пользователем за браузером.

Ваш URL (за исключением доменного имени)должен быть нечувствительным к регистру, если ваши пользователи должны коснуться его или ввести его и т. д. Вы должны разработать приложение, чтобы пользователи не вводили путь вероятный.

Ваш URL (за исключением доменного имени) должен быть чувствителен к регистру, если ваши пользователи никогда не будут вводить его вручную.

вывод

путь должен быть чувствителен к регистру. Мои точки взвешиваются в сторону чувствительных к регистру путей.


символы URL преобразуются в шестнадцатеричный код (если вы когда-либо замечали пробелы в URL-адресах, отображаемых как %20 и т. д.), и поскольку нижний и верхний регистр имеют разные значения hex,имеет смысл, что URL-адреса наиболее определенно чувствительны к регистру. Однако дух вопроса, по-видимому, должен быть стандартом, и я говорю "нет", но они есть. Это зависит от разработчика / поставщика, чтобы учесть это в своем коде, если они хотят, чтобы он работал независимо от конечного пользователя.


Я думаю, что это и многие ответы вокруг того, что спецификация делает или не говорит, не хватает точки вопроса.должны они чувствительны к регистру? Это действительно сложный вопрос. С точки зрения пользователя, чувствительность к регистру-это болевая точка, не все знают, что имеет значение. Вопрос о том, должен или не должен быть URIs, зависит от контекста вопроса. Для технической гибкости, да, они должны быть. Для удобства использования, нет, они не должны быть.


для веб-сайтов, размещенных на сервере Linux, URL чувствителен к регистру. http://www.google.com/about и http://www.google.com/About будет перенаправлен в разные места. В то время как в Windows Server URL-адрес без учета регистра, как в именовании папки и будет перенаправлен в то же место.


вопрос в том, должен ли url-адрес учитывать регистр?

Я не вижу пользы или хорошей практики за чувствительными к регистру URL-адресами. Это глупо, это отстой и его следует избегать во все времена.

просто чтобы поддержать мое мнение, когда кто-то спрашивает, какой URL, как вы можете объяснить, какие символы URL-адреса являются верхним или нижним регистром? Это чепуха, и никто никогда не должен говорить вам иначе.


можно сделать noncase чувствительной URL-адреса

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

создание Google.com..GOOGLE.com etc направляют к google.com