2014-07-11 3 views

ответ

40

The RFC for URIs говорит:

6.2.2.1. Случайная нормализация

Когда URI использует компоненты общего синтаксиса, всегда применяются правила эквивалентности синтаксиса компонента; а именно, что схема и хост нечувствительны к регистру и поэтому должны быть нормализованы в нижнем регистре. Например, URI эквивалентен http://www.example.com/.

Предполагается, что другие общие компоненты синтаксиса чувствительны к регистру, если схемами не определено иное (см. Раздел 6.2.3).

Обратите внимание, что схема («http» здесь), хост (имя сервера) не зависит от регистра, но в любом случае должна быть в нижнем регистре. Остальное зависит от регистра, если вы не используете другую схему, которая явно говорит, что она нечувствительна.

Таким образом, ключ и KEY - это разные вещи во всех URI на основе http в соответствии со спецификацией.

7

Согласно hurl.it, key будет равна 123 и KEY, 198. Они будут доступны как два разных запроса.

+1

Что делать, если язык изменен на классический ASP. –

+1

@ ch.smrutiranjanparida, выбор языка не зависит от того, как должен обрабатываться параметр запроса. Используете ли вы COBOL, Perl, Erlang, Classic ASP, R, Java, Lisp, не имеет значения. Конечно, библиотеки, которые интерпретируют запросы, могут иметь ошибки, а программисты могут прилежно выполнять строчные querystrings (и * не должны *), но с точки зрения URI _ они разные, если дело другое. См. [RFC] (http://tools.ietf.org/html/rfc3986#page-11) в [принятом ответе] (http://stackoverflow.com/a/24700171/111575) для получения более подробной информации. – Abel

+0

@ Абель получила. Спасибо за ввод. :) –

38

@ неверный ответ gbjbaanb: RFC указывают только разрешенный набор символов для строки запроса. Как фрагмент пути и компонентов URI, то запроса URI компоненты имеет смысл только только власти предоставляющих ресурс.

Это зависит от того, относится ли это к регистру или нет.

В случае C# и IIS, резервное хранилище для анализируемой строки запроса в HttpRequest объекта является System.Collections.Specialized.NameValueCollection, который случается быть нечувствительны к регистру (по умолчанию).

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

Кроме того, поскольку сама страница (и клиентский javascript) имеет доступ к необработанному URI, они могут свободно делать с ними все, что захотят.

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

Итак, в конце дня вы должны знать, что ожидает обработчик запроса в строке запроса. Он может (или не может) быть чувствительным к регистру.

+1

Я смотрел устаревший код на C#, пытаясь понять, почему ключи считались нечувствительными к регистру, и ваш ответ объяснял это хорошо. +1 –

Смежные вопросы