何时可以在GET http请求的请求行上有相对URL?

时间:2018-10-03 20:54:30

标签: http url request

我尝试了以下请求:

GET index.htm HTTP/1.1
connection: close
host: example.com
content-length: 0

但是获得了400错误请求。为什么?服务器应该能够拼凑绝对URL:http://example.com/index.htm。为什么会抱怨?我是否需要引荐来源标头才能在请求行上使用相对URL?

3 个答案:

答案 0 :(得分:2)

简短答案

您不能使用相对路径,因为HTTP规范(RFC7230)要求使用绝对路径。

说明

如果仅参考HTTP规范,就很容易找出为什么您的请求得到400 Bad Request响应:它违反了规范。 RFC7230定义了在您的方案中,请求目标必须使用需要绝对路径的所谓的原点形式:

origin-form = absolute-path [ "?" query ]

例如,http://example.org/where?q=now的HTTP请求为:

GET /where?q=now HTTP/1.1
Host: example.org

如果路径为空,例如http://example.org,则HTTP请求为:

GET / HTTP/1.1
Host: example.org

这是因为如Section 5.3.1中所述,需要绝对路径,如下所示(强调我的意思):

  

直接向原始服务器发出请求时,   客户端的CONNECT或服务器范围的OPTIONS请求(如下所述)   必须仅发送目标的绝对路径和查询组件   URI作为请求目标。

答案 1 :(得分:-1)

我认为<div><!-- all child controls html here --></div> 的这一行在GET index.htm HTTP/1.1上缺少'l'。

希望有帮助!

答案 2 :(得分:-1)

我找到了答案:如果请求行上的URL不是绝对的,则它必须是绝对路径。这意味着您可以省略协议和主机名,但不能省略路径的任何部分。以下工作:

GET /index.htm HTTP/1.1
connection: close
host: example.com
content-length: 0