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

Should a proxy ever change the HTTP request URI

根据 RFC2616,向代理发出请求时需要使用 absoluteURI 格式。

假设我有一个场景,其中我的 HTTP GET 请求通过代理: GET /test.html HTTP/1.1 主持人:example.com

Proxy 将请求 uri 转发为: http://example.com/test.html

是否应该存在代理将请求 uri 转发为以下情况的情况: /test.html

我问的原因是因为有些服务器有不同的重定向策略,其中包括原始URI,所以基本上重定向位置变成: (举个例子) http://example.com/test.htmlhttp://example.com/redirect.html 所以重定向变得不正确。

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

So lets say I have scenario in which my HTTP GET request is going through a proxy: GET /test.html HTTP/1.1 Host: 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。 (与另一个代理交谈的情况除外。)

so basically the redirection location becomes: (As an example) http://example.com/test.htmlhttp://example.com/redirect.html

不识别请求中的绝对 URL 并将其视为相对 URL 的服务器将表现不正确。作为 RFC 7230 states:

To allow for transition to the absolute-form for all requests in some future version of HTTP, a server MUST accept the absolute-form in requests, even though HTTP/1.1 clients will only send them in requests to proxies.