0

我们有一个用 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),并且似乎永远处于加载过程中。(并且萤火虫>网络面板什么也没显示。)

我也试过火狐设置

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

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

所以我想知道为什么 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
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
连接:保持活动

2.响应

HTTP/1.1 307 临时重定向
连接:keep-alive
位置:/login.html

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

4

2 回答 2

4

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

内容长度:0

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

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

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

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

于 2013-03-13T12:27:42.747 回答
1

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

于 2013-03-12T17:29:50.393 回答