#http #httprequest #standards-compliance #rfc2616 #rfc2396
#http #httprequest #соответствие стандартам #rfc2616 #rfc2396
Вопрос:
Вкратце: как в HTTP1.1 стандартным способом, соответствующим rfc2616, получить запрос на 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
Для этого в uri rfc указано
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.