我尝试了以下请求:
GET index.htm HTTP/1.1
connection: close
host: example.com
content-length: 0
但是获得了400错误请求。为什么?服务器应该能够拼凑绝对URL:http://example.com/index.htm。为什么会抱怨?我是否需要引荐来源标头才能在请求行上使用相对URL?
答案 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