HTTP 307重定向在Firefox中不起作用

时间:2013-03-11 13:51:44

标签: http firefox redirect

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

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

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

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

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

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

我也尝试过firefox设置

工具>选项>高级>一般:可访问性:[]“当网站尝试重定向或重新加载页面时警告我”,

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

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

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

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

  

获取/index.html HTTP / 1.1
  主持人:mydomain.com:30001
  User-Agent: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临时重定向
  连接:保持活力
  位置:/login.html

就是这样,firefox没有用另一个请求获取/login.html。

2 个答案:

答案 0 :(得分:4)

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

  

内容长度:0

响应头中的

解决了问题。谢谢。

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

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

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

答案 1 :(得分:1)

这是一个适用于Firefox的测试用例:http://greenbytes.de/tech/tc/httpredirects/#t307loc。您必须找出服务器中的不同之处。