ajax preflight在firefox中使用OPTIONS响应200失败

时间:2013-06-06 12:46:11

标签: javascript ajax firefox preflight

我有以下代码:

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();     
   };

调用时我看到以下警告:

  • URI
  • readystate = 1,status = 0
  • readystate = 2,status = 0
  • readystate = 4,status = 0
  • 预检OK

浏览器发送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文件上完成的。

这里有什么问题?

1 个答案:

答案 0 :(得分:0)

  

firefox是否阻止xhr请求从本地文件系统上的文件到任何地方?首先,由于安全原因,它不能引用相同的域(本地文件系统)。其次,因为由于相同的原始政策,它无法访问其他域。