【发布时间】:2013-12-01 17:41:13
【问题描述】:
当我的应用程序从服务器(通过 https)请求特定 URL 时,它会获得 301 Moved Permanently 重定向。但是 Location 标头格式错误。我看到这样的东西:
> GET https://myserver/url HTTP/1.1
< 301 Moved Permanently
< Location: https://redirectedserverhttp://myserver/url
如果我在没有主机的情况下发送请求,我会得到一个格式正确的 URL:
> GET /url HTTP/1.1
< 301 Moved Permanently
< Location: https://redirectedserver/url
我正在通过代理服务器,根据RFC 2068 第 5.1.2 节,“向代理发出请求时需要绝对URI 形式”所以看起来我'我以正确的方式进行操作,但代理响应不正确。如果我通过浏览器、curl 或 wget 尝试此操作,它可以正常工作。我看了wget代码,逻辑如下:
if( proxy && !https ) {
use absoluteURI
} else {
use relativeURI
}
Wget 甚至在其源代码中都有注释:
/* When using SSL over proxy, CONNECT establishes a direct
connection to the HTTPS server. Therefore use the same
argument as when talking to the server directly. */
这是在某处定义的实际标准吗?如果应该使用绝对 URI 形式,为什么其他工具不使用它,为什么会失败?
【问题讨论】:
-
如果您监听网络接口的流量,您会看到标头中几乎所有的 http GET 请求都使用相对路径而不是完整路径。而不是使用完整路径,您应该考虑在 http(s) 标头中使用 Host 行(请通知@我,因为我不手动检查答案)。
-
@user2284570:我正在尝试找出在与代理通信时使用 SSL 时的协议。网络嗅探器不会告诉我任何信息,因为数据包已加密。
-
是的,但是您可以看到 http 的结果。另外,
I'm trying to figure out the protocol when using SSL while talking to the proxy,您的意思是您希望您的代理检测协议是否是 sftp 而不是 https? -
我在 HTTP 和 HTTPS 两种情况下都发送
GET https://<host>/<url>,但在使用 HTTPS 时,代理使用无效的重定向 URL 进行响应。如果我将其更改为GET /<url>它可以工作,但根据 RFC 我的应该也可以工作。我正在尝试确定是否应该将我的代码更改为我列出的if( proxy && !https),或者我的代码是否正确而这个特定的代理是错误的。
标签: https proxy http-redirect