我有以下代码:
Util.xmlGet = function(uriend, callback) {
var xmlhttp;
var uri;
if (window.XMLHttpRequest) {
// code for modern browsers
xmlhttp=new XMLHttpRequest();
} else {// code for dinosaurs
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
if(document.URL.startsWith("file://")) {
uri = "https://tomcat.realm:8443/worldmodel/worldmodel?";
} else {
uri = "/worldmodel/worldmodel?"
}
alert(uri+uriend);
xmlhttp.onreadystatechange=function() {
alert("readystate="+xmlhttp.readyState+", status="+xmlhttp.status);
if (xmlhttp.readyState==4 && xmlhttp.status==0) {
alert("preflight OK");
}
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
alert("calling back");
callback(xmlhttp.responseXML);
}
}
xmlhttp.open("GET",uri+uriend,true);
xmlhttp.setRequestHeader("Content-type","text/xml;charset=UTF-8");
xmlhttp.send();
};
调用时我看到以下警告:
浏览器发送OPTIONS请求,并收到“200”响应。更确切地说:
https://tomcat.realm:8443/worldmodel/worldmodel?type=thing
Request Method:
OPTIONS
Status Code:
HTTP/1.1 200 OK
Request Headers
14:35:30.000
User-Agent:Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20100101 Firefox/21.0
Origin:nullHost:tomcat.realm:8443
Connection:keep-alive
Access-Control-Request-Method:GET
Access-Control-Request-Headers:content-type
Accept-Language:hu,en-us;q=0.8,es;q=0.5,en;q=0.3
Accept-Encoding:gzip, deflateAccept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Response Headers Δ5ms
Server:Apache-Coyote/1.1
Date:Thu, 06 Jun 2013 12:35:30 GMT
Content-Length:0
Allow:GET, HEAD, POST, TRACE, OPTIONS
永远不会发送GET请求,不再有来自onreadystatechange的状态。
这是通过Firefox 21.0 Mozilla Firefox for Ubuntu Canonical - 1.0(这是帮助/关于firefox报告)在本地文件系统中的html文件上完成的。
这里有什么问题?
答案 0 :(得分:0)
firefox是否阻止xhr请求从本地文件系统上的文件到任何地方?首先,由于安全原因,它不能引用相同的域(本地文件系统)。其次,因为由于相同的原始政策,它无法访问其他域。