Как сделать стандартный запрос 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.