parameterString беспорядок NSURL с использованием''; по сравнению с '&'

Я хотел бы использовать -[NSURL parameterString] для парсинга параметров URL, я был передан. Это говорит, что URL должен соответствовать RFC 1808, но теперь задающийся вопросом, если наш делают?!? Мы используем что-то как:

http://server/path/query?property1=value1&property2=value2

но RFC 1808 никогда не упоминает амперсанд (и) как допустимый разделитель параметра (по крайней мере, способ, которым я считал его). Это предлагает точку с запятой (;). Возможно, потому что это было проектировано в 1995? Имеет и замененный;? раз так кто-либо проверяет, проанализирует ли parameterString NSURL также с и как разделитель?

Каков "правильный" путь, прежде чем мы выроем большое дыра?

6
задан Mike Abdullah 24 July 2013 в 13:40
поделиться

2 ответа

Согласно 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, разделенных символом &"

.
8
ответ дан 10 December 2019 в 00:38
поделиться

RFC1808 не определяет внутренний формат строки запроса. Полагаю, что точка с запятой 1808 - это дополнительная информация другого рода (по путям), которая на практике никогда не используется. Насколько я вижу, интерфейс NSURL не содержит методов, которые бы обрабатывали/разбивали содержимое самой строки запроса, так что это не представляет никакого интереса для класса, и действительно ваш URL соответствует 1808.

На самом деле, строки запроса не имеют никакого RFC-определенного формата; вы вполне можете поместить в них любую строку и получить ее нетронутой на стороне сервера. Однако стандарт HTML описывает способ создания строк запроса из содержимого формы, и этот формат приложения/x-www-form-urlencoded используется большинством серверных скриптов.

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

2
ответ дан 10 December 2019 в 00:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: