【问题标题】:Should a proxy ever change the HTTP request URI代理是否应该更改 HTTP 请求 URI
【发布时间】:2015-01-27 02:01:11
【问题描述】:

根据 RFC2616,当向代理发出请求时,absoluteURI 形式是必需的。

假设我的 HTTP GET 请求通过代理进行: 获取 /test.html HTTP/1.1 主机:example.com

代理转发请求,请求 uri 为: http://example.com/test.html

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

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

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

【问题讨论】:

  • 这似乎不是help center中定义的范围内的编程问题

标签: http redirect proxy


【解决方案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。 (与另一个代理通信的情况除外。)

所以基本上重定向位置变为:(例如)http://example.com/test.htmlhttp://example.com/redirect.html

无法识别请求中的绝对 URL 并将其视为相对 URL 的服务器将出现错误行为。作为RFC 7230 states

允许在某些情况下将所有请求转换为绝对形式 HTTP 的未来版本,服务器必须接受绝对形式 请求,即使 HTTP/1.1 客户端只会发送它们 对代理的请求。

【讨论】:

    猜你喜欢
    • 2018-11-15
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    • 2018-08-02
    • 2015-06-24
    • 1970-01-01
    相关资源
    最近更新 更多