如何使XMLHttpRequest在Firefox上的HTTPS上工作?
时间:2020-03-06 14:46:04 来源:igfitidea点击:
当我尝试通过XMLHttpRequest发送HTTP GET请求时,它可以在非安全HTTP上使用。
但是,当通过HTTPS发送时,不同的浏览器会产生不同的结果:
在Firefox 3.0.2上:
GET请求未到达Web服务器。
在IE 7上:
GET请求到达了Web服务器。
这与Firefox 3对不受信任的证书越来越严格有关系吗?
有没有解决的办法?
我已经在Firefox的证书管理器中添加了URL作为例外。
错误控制台不会报告任何错误。
我在XMLHttpRequest的open()周围添加了try-catch并发送。没有异常被抛出。
同时使用绝对URL和相对URL路径均无效。
这是代码片段:
var xmlHttp; try { // Firefox, Opera 8.0+, Safari xmlHttp=new XMLHttpRequest(); } catch (e) { // Internet Explorer try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { return false; } } } // we won't be handling any HTTP response xmlHttp.onreadystatechange=function() { // do nothing.. } // send HTTP GET request try { xmlHttp.open("GET", "/[relative path to request]", true); xmlHttp.send(null); } catch (e) { alert('Error sending HTTP GET request!'); return false; }
谢谢,
肯尼斯
解决方案
我们是否有机会在HTTPS页面中请求非HTTPS URL?错误日志/控制台中是否显示任何消息?
尝试在开封后放置封口:
// send HTTP GET request try { xmlHttp.open("GET", "/[relative path to request]", true); } catch (e) { alert('Error sending HTTP GET request!'); return false; } // we won't be handling any HTTP response xmlHttp.onreadystatechange=function() { // do nothing.. } // Then send it. xmlHttp.send(null);
进行了一些谷歌搜索确认:
http://www.ghastlyfop.com/blog/2007/01/onreadystate-changes-in-firefox.html
尽管该文档说要在.send(null)之后添加功能,但我已经
始终在打开后连接。