我们有一个用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。
答案 0 :(得分:4)
通过比较来自其他服务器的响应,它看起来像添加
响应头中的内容长度:0
解决了问题。谢谢。
根据协议,如果没有给出Content-Length,则可以通过连接关闭来确定Content-Length。
我的原始响应没有提供内容长度,意味着浏览器正在等待此响应的传输结束以知道正确的长度,但设置Connection:keep-alive并不会终止此连接。
我猜IE或Chrome会立即开始重定向处理 它知道它是一个307重定向,而firefox不会这样做直到它 完成阅读此回复。
答案 1 :(得分:1)
这是一个适用于Firefox的测试用例:http://greenbytes.de/tech/tc/httpredirects/#t307loc。您必须找出服务器中的不同之处。