代理是否应该更改HTTP请求URI

时间:2015-01-27 02:01:11

标签: http redirect proxy

根据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 所以重定向变得不正确。

只是想知道代理人的工作是否应该解决这个问题?

1 个答案:

答案 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客户端只发送它们      请求代理。