Допустимо ли иметь более одного знака вопроса в URL? - PullRequest
80 голосов
/ 27 мая 2010

Сегодня я наткнулся на следующий URL:

http://www.sfgate.com/cgi-bin/blogs/inmarin/detail??blogid=122&entry_id=64497

Обратите внимание на двойной знак вопроса в начале строки запроса:

??blogid=122&entry_id=64497

Похоже, у моего браузера не было никаких проблем с ним, и работает быстрый букмарклет:

javascript:alert(document.location.search);

только что дал мне строку запроса, показанную выше.

Это действительный URL? Причина, по которой я так педантичен (при условии, что так и есть), заключается в том, что мне нужно анализировать URL-адреса, подобные этим, для параметров запроса, а поддержка двойных вопросительных знаков потребует некоторых изменений в моем коде. Очевидно, что если они в дикой природе, я должен буду поддержать их; Мне в основном любопытно, виновата ли я в том, что я не совсем придерживаюсь стандартов URL, или это на самом деле нестандартный URL.

Ответы [ 2 ]

96 голосов
/ 27 мая 2010

Да, это действительно. Только first ? в URL имеет значение, любое после того, как оно трактуется как буквальные вопросительные знаки:

Компонент запроса обозначен первый знак вопроса ("?") символ и заканчивается числом знак ("#") или к концу URI.

...

Символы косой черты ("/") и знак вопроса («?») может представлять данные внутри компонента запроса. берегись что некоторые старше, ошибочны реализации могут не обрабатывать такие данные правильно, когда он используется в качестве базовый URI для относительных ссылок (Раздел 5.1), очевидно, потому что они не удается отличить данные запроса от данные пути при поиске иерархические разделители. Тем не менее, как Компоненты запроса часто используются для нести идентификационную информацию в форма пар "ключ = значение" и одна часто используемое значение является ссылкой на другой URI, иногда лучше для удобства использования, чтобы избежать процентное кодирование этих символов.

http://tools.ietf.org/html/rfc3986#section-3.4

21 голосов
/ 17 февраля 2016

В качестве тангенциально связанного ответа foo?spam=1?&eggs=3 дает параметру spam значение 1?

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