Как сделать стандартный запрос GET в HTTP1.1

Вкратце: как стандарт HTTP1.1 соответствует rfc2616 GET-запросу на URL-адрес, например http://example.com/?query

Википедия говорит

GET /?query HTTP/1.1
...

В rfc2616 сказано

Request-URI    = "*" | absoluteURI | abs_path | authority

Только abs_path и absoluteURI относятся к запросам GET.

abs_path

где abs_path на самом деле от uri rfc, который запрещает "?", так как abs_path на самом деле является частью uri, которая предшествует части запроса. Так что, похоже, вариант из Википедии синтаксически неверен.

absoluteURI

Для этого УРИ РФ говорит

absoluteURI   = scheme ":" ( hier_part | opaque_part )
hier_part     = ( net_path | abs_path ) [ "?" query ]

Таким образом, можно поместить такой запрос в Request-URI, но, к сожалению, rfc2616 запрещает передачу absoluteURI для клиента, не говорящего с прокси. Веб-сервер может получить его стандартным образом, но на самом деле невозможно отправить его стандартным образом с помощью браузера или другого клиента.

rel_path

К моему удивлению, rfc2616 упоминает "?" в rel_path, но это не разрешено rfc2396, и на самом деле невозможно поместить rel_path где-нибудь в запрос http, поскольку правило rel_path не используется синтаксически нигде в rfc2616.

Итак, мой вопрос: как стандартно выполнить такой запрос, и все ли браузеры нарушают стандарт?

1 ответ

Решение

Это ошибка в RFC 2616. См. Http://trac.tools.ietf.org/wg/httpbis/trac/ticket/11.

Другие вопросы по тегам