Является ли знак вопроса в URL-части строки запроса?

TL; TR: есть (первый) знак вопроса в URL-части запроса или это просто разделитель, за которым следует запрос?

В RFC 1738, раздел 3.3, предлагается, что "?" (вопросительный знак) не является частью строки запроса, а просто отделяет его от пути:

http://<host>:<port>/<path>?<searchpart>

Грамматика, представленная в Приложении А к документу RFC 3986, также указывает на "?" не является частью фактической строки запроса:

URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]

Теперь рассмотрим два URL:

  1. http://server.com/api/item.json
  2. http://server.com/api/item.json?

Являются ли они эквивалентными или разными?

Действительно ли они различают их и используют для идентификации двух разных ресурсов?

+5
источник поделиться
1 ответ

ТЛ; др:

  • ? не является частью компонента запроса.
  • URI не эквивалентны, потому что у одного нет компонента запроса, в то время как у другого есть пустой компонент запроса.

В настоящее время стандартом URI (STD 66) является RFC 3986.

Раздел 6.2. Сравнительная лестница описывает методы проверки соответствия URI.

В 6.2.3. Принципиальная нормализация гласит:

Нормализация не должна удалять разделители, если их связанный компонент пуст, если лицензия на это не указана в спецификации схемы. Например, URI http://example.com/? не может считаться эквивалентным любому из приведенных выше примеров.

Где "примеры выше" относятся к:

http://example.com
http://example.com/
http://example.com:/
http://example.com:80/

(Эти 4 URI эквивалентны.)

Итак, http://example.com/api/item.json не имеет компонента запроса, а http://example.com/api/item.json? имеет пустой компонент запроса.

+5
источник

Посмотрите другие вопросы по меткам или Задайте вопрос