Я хотел бы использовать -[NSURL parameterString]
для парсинга параметров URL, я был передан. Это говорит, что URL должен соответствовать RFC 1808, но теперь задающийся вопросом, если наш делают?!? Мы используем что-то как:
http://server/path/query?property1=value1&property2=value2
но RFC 1808 никогда не упоминает амперсанд (и) как допустимый разделитель параметра (по крайней мере, способ, которым я считал его). Это предлагает точку с запятой (;). Возможно, потому что это было проектировано в 1995? Имеет и замененный;? раз так кто-либо проверяет, проанализирует ли parameterString NSURL также с и как разделитель?
Каков "правильный" путь, прежде чем мы выроем большое дыра?
Согласно RFC 1808 (2.1. URL Syntactic Components), правильный синтаксис выглядит следующим образом:
<scheme>://<net_loc>/<path>;<params>?<query>#<fragment>
В нем сказано, что информация в запросе отформатирована в соответствии с разделом 3. 3 из RFC 1738, который говорит нам :
"Внутри компонентов пути и поисковой части, "/", ";", "?" зарезервированы"
Для меня вышеизложенное говорит, что в вашем URL путь (к вашему CGI) является :
http://server/path/query
, а запрос :
property1=value1&property2=value2
, который не содержит зарезервированных символов. Значит, вы в порядке. На самом деле использование "&" в качестве разделителя в строке запроса здесь происходит из спецификации CGI CGI, а не из RFC URL :
"Данные формы - это поток пар name=value, разделенных символом &"
.RFC1808 не определяет внутренний формат строки запроса. Полагаю, что точка с запятой 1808 - это дополнительная информация другого рода (по путям), которая на практике никогда не используется. Насколько я вижу, интерфейс NSURL не содержит методов, которые бы обрабатывали/разбивали содержимое самой строки запроса, так что это не представляет никакого интереса для класса, и действительно ваш URL соответствует 1808.
На самом деле, строки запроса не имеют никакого RFC-определенного формата; вы вполне можете поместить в них любую строку и получить ее нетронутой на стороне сервера. Однако стандарт HTML описывает способ создания строк запроса из содержимого формы, и этот формат приложения/x-www-form-urlencoded
используется большинством серверных скриптов.
В соответствии с разделом HTML4 17.13.4.1, &
браузеры разделителей параметров должны использовать для создания строк запроса из нескольких параметров, поэтому да, вы должны поддерживать амперсанд как разделитель параметров. HTML4 рекомендует, чтобы серверные скрипты принимали точку с запятой в качестве альтернативы разделителю амперсанда в строках запроса, так как это позволяет избежать большего экранирования. Но этого не требуется, и действительно (к сожалению) многие среды чтения серверов/форм не принимают точку с запятой для этой цели.