javascript - 为什么这是跨域请求

标签 javascript cross-domain

我正在尝试制作一组​​文件,以便能够发送给某人,并且他们可以在本地网络浏览器中查看一些内容。当使用网络服务器(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 页面中什么也没发生。它只是一个 Canvas ,主体在加载时调用 webGLStart。

有办法解决这个问题吗?还是 chrome 和 IE 不允许这样做?

最佳答案

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

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

Chrome 和 IE 完全禁止文件方案 URI 的访问。 Firefox 允许它们 only if主机 URI 所在的目录是包含目标 URI 的目录的祖先。

<小时/>

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

关于javascript - 为什么这是跨域请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29493538/

相关文章:

c# - 重定向音频流以避免 CORS - C#

java - jetty 跨源过滤器

javascript - Action 向导中的 Adob​​e Javascript 与表单按钮

javascript - 使用 node.js 从文件中返回搜索文本的行

javascript - 在这种情况下如何添加带参数的回调?

javascript - fs.readFile 函数响应未定义...有什么想法吗?

angularjs - 请求的资源中不存在 'Access-Control-Allow-Origin' header - AngularJS

node.js - 请求的资源上不存在 'Access-Control-Allow-Origin' header - socket.io

javascript - 比较 Vanilla JS 中包含对象的两个数组

javascript - 绕过WebView跨域安全