根据RFC2616,在向代理发出请求时,必须使用absoluteURI表单。
因此,假设我的HTTP GET请求通过代理进行的方案: GET /test.html HTTP / 1.1 主持人:example.com
代理请求uri转发请求为: http://example.com/test.html
是否存在代理转发请求的情况如下: /test.html
我问的原因是因为某些服务器有不同的重定向策略,其中包括原始URI,所以基本上重定向位置变为: (举个例子) http://example.com/test.htmlhttp://example.com/redirect.html 所以重定向变得不正确。
只是想知道代理人的工作是否应该解决这个问题?
答案 0 :(得分:1)
因此,假设我的HTTP GET请求通过代理进行的场景:GET /test.html HTTP / 1.1主机:example.com
这不是对代理的有效请求。这必须是完整的URL,因此请求应为:
GET http://example.com/test.html HTTP/1.1
收到此消息后,向源服务器发出请求的代理应该确实将其传递给example.com
,如下所示:
GET /test.html HTTP/1.1
Host: example.com
所以是的,代理不仅应该但必须传递与其收到的请求URI不同的请求URI。 (对于与另一个代理人交谈的情况有例外。)
所以基本上重定向位置变为:(例如)http://example.com/test.htmlhttp://example.com/redirect.html
在请求中无法识别绝对URL并将其视为相对URL的服务器行为不正确。正如RFC 7230 states:
允许转换为某些请求中的所有请求的绝对格式 HTTP的未来版本,服务器必须接受绝对形式 请求,即使HTTP / 1.1客户端只发送它们 请求代理。