【问题标题】:why is this a cross domain request为什么这是一个跨域请求
【发布时间】:2015-06-12 03:57:32
【问题描述】:

我正在尝试制作一组​​文件,以便能够发送给某人,他们可以在本地网络浏览器中查看一些内容。我的代码在使用网络服务器(apache)查看时有效,但如果我将其作为文件加载(即 file:///C:/Code/Web/test/index.html),则会出现跨域请求错误从我的 JavaScript 文件加载 JSON 文件时。 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 不允许这样做?

【问题讨论】:

  • 现代浏览器将每个不同的file:// URL 视为一个单独的主机。
  • 谢谢,我担心是这种情况

标签: javascript cross-domain


【解决方案1】:

它可以保护您免受此类攻击:

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

Chrome 和 IE 完全禁止访问文件方案 URI。 Firefox 允许他们only if 主机 URI 位于一个目录中,该目录的祖先是包含目标 URI 的目录。


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

【讨论】:

    【解决方案2】:

    出于安全原因,浏览器必须限制与本地文件系统的交互。如果你想测试你的ajax请求,你可以搭建lighttpd等轻量http服务器环境,node.js npm包http-server或者使用其中一种开发方案,比如Microsoft WebMatrix

    【讨论】:

      猜你喜欢
      • 2013-04-25
      • 1970-01-01
      • 2012-05-16
      • 1970-01-01
      • 1970-01-01
      • 2015-09-24
      • 2012-02-05
      • 2014-04-02
      相关资源
      最近更新 更多