为什么这是一个跨域请求

时间:2015-04-07 14:05:23

标签: javascript cross-domain

我试图制作一组文件以便能够发送给某人,他们可以在本地浏览网页浏览器中的某些内容。使用Web服务器(apache)查看时我的代码有效,但如果我将其作为文件加载(即file:/// C:/Code/Web/test/index.html),则会出现跨域请求错误加载JSON文件时从我的JavaScript文件。 HTML,JS和JSON文件都在同一个文件夹中。我不确定这是一个跨域请求以及为什么chrome和IE在加载JSON文件时失败。 Firefox加载它没有问题。

我用来加载文件的JS是:

const JSON_FILE = "tin.json";
var xmlhttp;

function webGLStart() 
{
    fetchDoc(JSON_FILE,loadJSON)
}

function fetchDoc(url,cfunc)
{
    if (window.XMLHttpRequest)
    {
        xmlhttp=new XMLHttpRequest();
    }
    xmlhttp.onreadystatechange=cfunc;
    xmlhttp.open("GET",url,false);
    xmlhttp.send();
}

function loadJSON()
{
    if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
    {
        var input = JSON.parse(xmlhttp.responseText);
        displayData(input);
    }
}

在我的html页面中没有发生任何事情。它只是一个画布,主体在加载时调用webGLStart。

有没有办法解决这个问题,还是Chrome和IE不允许这样的事情?

2 个答案:

答案 0 :(得分:1)

它可以保护您免受以下形式的攻击:

  • 您会收到一封包含HTML文档作为附件的电子邮件
  • 双击附件并在默认浏览器中打开HTML文档
  • 文档中嵌入的JavaScript访问硬盘上的文件并将其上传到攻击者

Chrome和IE禁止直接访问文件方案URI。 Firefox允许他们only if主机URI位于包含目标URI的目录的祖先目录中。


您已经确定了解决方法:在Web服务器上托管Web应用程序。

答案 1 :(得分:0)

由于安全原因,浏览器必须限制与本地文件系统的交互。如果要测试ajax请求,可以设置light http服务器环境,例如lighttpd,node.js npm package http-server,或者使用开发解决方案之一,例如Microsoft WebMatrix