Допустимо ли иметь более одного вопросительного знака в URL-адресе?

сегодня я наткнулся на следующий 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 ответов


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

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

...

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

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


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