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

#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.