【问题标题】:HTTP 307 redirect does not work in firefoxHTTP 307 重定向在 firefox 中不起作用
【发布时间】:2013-02-26 17:34:41
【问题描述】:

我们有一个用 C 编写的自定义网络服务器。

当浏览器访问页面http://mydomain.com:30001/index.html时,

我们的网络服务器会将浏览器重定向到 mydomain.com:30001/login.html,通过向浏览器发送 http 307 响应,然后浏览器将访问登录 url。

这在 IE 8 和 Chrome 中运行良好。

但在firefox(18+)中,访问页面http://mydomain.com:30001/index.html时,

浏览器无法加载页面(/index.html 或 /login.html),并且似乎永远处于加载过程中。 (并且 firebug > network 面板什么也没有显示。)

我也试过firefox设置

工具>选项>高级>常规:辅助功能:[]“当网站尝试重定向或重新加载页面时警告我”,

但没有效果,也没有任何改变。

所以我想知道为什么 firefox 的行为不同或有其他原因。

更新:这是在 wireshark 中捕获的 firefox HTTP 部分

1.REQUEST(在浏览器地址栏访问http://mydomain.com:30001/index.html时)

GET /index.html HTTP/1.1
主机:mydomain.com:30001
用户代理:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0
接受:text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
接受语言:zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
接受编码:gzip、deflate
DNT:1
连接:保持活动

2.响应

HTTP/1.1 307 临时重定向
连接:保持活动
位置:/login.html

就是这样,Firefox 不会通过另一个请求获取 /login.html。

【问题讨论】:

    标签: http firefox redirect


    【解决方案1】:

    通过比较来自其他服务器的响应,看起来像添加了

    内容长度:0

    在响应头中解决了这个问题。谢谢。

    根据协议,如果没有给出 Content-Length,则 Content-Length 可以通过连接关闭来确定。

    我的原始响应没有提供 Content-Length,意味着浏览器正在等待此响应的传输结束以知道正确的长度,但设置 Connection: keep-alive 不会结束此连接。

    我猜 IE 或 Chrome 会在之后立即开始重定向处理 它知道这是一个 307 重定向,而 firefox 直到它才这样做 完成阅读此响应。

    【讨论】:

      【解决方案2】:

      这是一个适用于 Firefox 的 307 测试用例:http://greenbytes.de/tech/tc/httpredirects/#t307loc。你必须找出你的服务器有什么不同。

      【讨论】:

        猜你喜欢
        • 2022-07-06
        • 1970-01-01
        • 2015-03-22
        • 2013-08-26
        • 1970-01-01
        • 2011-05-20
        • 1970-01-01
        • 1970-01-01
        • 2018-07-28
        相关资源
        最近更新 更多