Предположим, у меня есть такой URL:
http://www.example.com?key=123&KEY=198
Тогда каков будет результат
request.querystring("key")
and
request.querystring("KEY")
Я немного смущен.
Предположим, у меня есть такой URL:
http://www.example.com?key=123&KEY=198
Тогда каков будет результат
request.querystring("key")
and
request.querystring("KEY")
Я немного смущен.
В RFC для URI говорится:
6.2.2.1. Нормализация случая
Когда URI использует компоненты общего синтаксиса, всегда применяются правила эквивалентности синтаксиса компонентов; а именно, что схема и хост не чувствительны к регистру и поэтому должны быть нормализованы к строчным. Например, URI эквивалентен http://www.example.com/.
Предполагается, что другие компоненты общего синтаксиса чувствительны к регистру, если в схеме не указано иное (см. раздел 6.2.3).
Обратите внимание, что схема (здесь "http"), host (имя сервера) нечувствительны к регистру, но в любом случае должны быть строчными. Остальное зависит от регистра, если вы не используете другую схему, которая явно говорит, что она должна быть нечувствительной.
Таким образом, ключ и KEY - это разные вещи во всех основанных на http URI в соответствии со спецификацией.
Редактировать: @Nicholas отчасти ошибается, полагая, что орган определяет, что он принимает, что верно для пользовательских схем и органов, которые определяют свои собственные URI, но http - это четко определенная спецификация, которой соответствует каждый (или у вас могут быть запросы http, которые имеют, скажем, символ pipes как разделитель. Представьте себе хаос!)
спецификация RFC для HTTP гласит:
Схема и хост не чувствительны к регистру и обычно предоставляются в в нижнем регистре; все остальные компоненты сравниваются с учетом регистра манера. Символы, отличные от указанных в "зарезервированном" наборе, эквивалентно их октетам, закодированным в процентах: нормальная форма не кодировать их (см. разделы 2.1 и 2.2 [RFC3986]).
Таким образом, часть запроса URI, определяемая спецификацией для схемы HTTP, чувствительна к регистру. Если у Microsoft есть синтаксический анализатор для строк запроса без учета регистра, он не соответствует спецификации. Не то чтобы я думаю, что этот уровень пристрастия действительно имеет большое значение.
Ответ @gbjbaanb неверен: в RFC указывается только разрешенный набор символов для строки запроса. Как и компоненты пути и фрагмента URI, компонент URI запроса имеет значение только для полномочий, предоставляющих ресурс.
Это полностью зависит от того, является ли этот материал чувствительным к регистру или нет.
В случае С# и IIS резервным хранилищем для проанализированной строки запроса в объекте HttpRequest
является System.Collections.Specialized.NameValueCollection
которая оказывается нечувствительной к регистру (по умолчанию).
Поскольку этот класс предлагает другие конструкторы, позволяющие предоставлять различные средства сравнения на равенство, абсолютно ничто не мешает реализации сделать ее чувствительной к регистру.
Кроме того, поскольку сама страница (и JavaScript на стороне клиента) имеют доступ к необработанному URI, они могут делать с ней все, что захотят.
Если строка запроса создается в результате отправки формы HTML, ключи (имена) берутся из значения атрибута name
элемента управления формы, который, согласно спецификациям HTML, чувствителен к регистру. Но насколько я знаю, никто на самом деле не делает этого.
Итак, в конце дня вы должны знать, что ожидает обработчик запросов в строке запроса. Это может (или не может) быть чувствительным к регистру.
Согласно hurl.it, key
будет равно 123
и key
, 198
. Они будут доступны как два разных запроса.