从 file:// 方案运行的应用程序出现 CORS 错误

2024-04-13

我有一个 AngularJS/Cordova 应用程序,它轮询远程服务器上的 JSON 服务:

$http({method: 'GET', url: 'http://example.com/index.php'})

在浏览器中开发并在我的 Intranet apache 服务器上运行(http://dev)我收到“不存在‘Access-Control-Allow-Origin’标头”,因此我通过添加以下内容来修复此问题:

Header set Access-Control-Allow-Origin "http://dev"

一切正常,我明白了Origin:http://dev在我的 Chrome 开发工具中。

因此,必须第一次考虑这个问题,我想知道当应用程序在 Android/iOS Web 视图中运行时,Origin 会是什么。我决定在我的设备上进行构建和部署,并期望在远程调试(iOS 的 Safari 和 Android 的 Weinre)中看到相同的错误,但令我惊讶的是它有效(不发送任何 CORS 标头)!我还发现,在这两种设备中,应用程序在 file:// 方案下的 webview 中运行,而不是(我假设的)手机操作系统提供的某种 http 服务器。

因此,研究似乎表明 file:// 不需要 CORS - 这样的“站点”可以访问任何域上的任何 XHR 资源。但是,当我在桌面浏览器上测试时,我发现虽然 Safari 不需要 CORS 文件:// 但 Chrome 可以,FireFox 可以在没有 CORS 的情况下以任何方式工作

所以我的问题是:

1) 为什么我的应用程序在 Android/iOS 中无需 CORS 即可运行 - 是因为 CORS 不适用于 file://,还是 Cordova 正在执行某些操作以使其在设备中运行?

I have <access origin="*"/>在我的配置中

2) 如果在等待问题 1 的答案时,我希望进入安全站点并明确允许来自应用程序的请求,那么您为 file://“hosts”赋予 Access-Control-Allow-Origin 的值是多少?在我的调试中,来自 file:// 的请求中没有 Origin 标头

3)除了阻止对远程服务器的 XHR 请求之外,Chrome 还阻止我的应用程序模板(我使用单独的文件),请参见下文。这是我的应用程序的潜在问题,还是只是我不需要担心的 Chrome 问题?

XMLHttpRequest cannot load file:///Volumes/projects/phonegap/www/templates/tabs.html. Cross origin requests are only supported for HTTP. 

CORS 标头有两种方式表明应允许跨域 XHR:

  • sending Access-Control-Allow-Origin: *(允许所有主机)
  • 将您想要允许的主机放入Origin后端的标头

至于file://他们将生成一个 URLnull Origin无法通过第二个选项授权(回声).

As 提及 https://stackoverflow.com/questions/21297169/cors-and-phonegap-apps:

跨域策略不适用于 PhoneGap(出于多种原因,主要是因为您的应用程序本质上是在设备上的 file:// URI 上运行的)。

请注意,您必须为应用程序设置白名单才能访问这些外部域。

至于Chrome问题,可以在开发者控制台看到:

Failed to load resource: net::ERR_FILE_NOT_FOUND file:///C:/2.html XMLHttpRequest cannot load file:///C:/2.html. Received an invalid response. Origin 'null' is therefore not allowed access.

进行了一次讨论Chromium 项目的问题跟踪器,#40787 https://code.google.com/p/chromium/issues/detail?id=40787。他们将问题标记为不会修复因为这种行为是有意为之的。

有一个解决方法建议简单地关闭 Chrome 中的 CORS 以用于开发目的,启动 chrome--allow-file-access-from-files --disable-web-security

例如对于Windows

`C:\Users\YOUR_USER\AppData\Local\Google\Chrome\Application\chrome.exe --allow-file-access-from-files --disable-web-security`

这是更多与科尔多瓦相关的答案:

  • CORS 和 PhoneGap 应用 https://stackoverflow.com/questions/21297169/cors-and-phonegap-apps
  • Apache Cordova 中的域白名单 http://docs.phonegap.com/en/1.8.0rc1/guide_whitelist_index.md.html#Domain%20Whitelist%20Guide- 控制对外部域的访问的安全模型。

检查这些资源以获取有关 CORS 的更多信息:

  • 跨源资源共享和 file:// https://stackoverflow.com/questions/5138057/cross-origin-resource-sharing-and-file
  • 一个不错的 CORS 教程:http://www.html5rocks.com/en/tutorials/cors/ http://www.html5rocks.com/en/tutorials/cors/
  • 围绕原产地政策开展工作 http://www.sitepoint.com/working-around-origin-policy/
  • HTTP 访问控制 (CORS) (Mozilla) https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

另请检查浏览器对 CORS 的支持:

  • http://caniuse.com/#feat=cors http://caniuse.com/#feat=cors

并记录在案W3C 上的正式 CORS 规范 http://www.w3.org/TR/cors/ :)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 file:// 方案运行的应用程序出现 CORS 错误 的相关文章

随机推荐

  • Google Maps Javascript API V3 - 如何删除自定义控件?

    我通过以下方式创建了自定义控制器http code google com apis maps documentation javascript controls html http code google com apis maps doc
  • Ansible:权限被拒绝(公钥、密码)

    我无法连接到 Ansible 中的主机 这是错误 192 168 1 12 无法到达 gt 改变 假 msg 错误 SSH 在连接过程中遇到未知错误 我们建议您使用 vvvv 重新运行该命令 这会导致 将启用 SSH 调试输出以帮助诊断问题
  • Yii2 迁移。表名中的百分号和括号

    我在github上浏览了yii2 oauth2 server代码 并在其中遇到了有趣的语法迁移文件 https github com Filsh yii2 oauth2 server blob master migrations m1405
  • 客户端非 ES6 浏览器上的 JSX Spread 属性

    ReactJS JSX 有一种可以轻松向组件添加大量属性的方法 var props props foo x props bar y var component
  • 定义深度/维度未知的 C++ 模板

    我想写一个n维直方图类 它应该采用包含其他 bin 等的 bin 的形式 其中每个 bin 包含最小和最大范围 以及指向下一个维度 bin 的指针 bin 的定义如下 template
  • PivotCaches.add 错误 5 - 2003 到 2010 宏

    我有一个 Excel 2003 xls 文件 我试图在 Excel 2010 中运行该文件 我首先将该文件另存为 xlsm 并将该目录添加为信任中心中的受信任目录 我收到错误代码 如下箭头所示 注意 如果我将数据透视表版本更改为 12 它仍
  • 在 C++ 中将 char 或 string 转换为 bitset

    我正在做 DES 加密的作业 但我似乎无法将字符串转换 更不用说将字符转换为位集了 谁能告诉我如何在 C 中将单个字符转换为位集 下列 char c A std bitset lt 8 gt b c implicit cast to uns
  • 如何在 PHP 中实现后台/异步 write-behind 缓存?

    我有一个特定的 PHP 页面 由于各种原因 需要将 200 个字段保存到数据库中 这是 200 个单独的插入和 或更新语句 现在显而易见的事情就是减少这个数字 但是 就像我说的 由于我不想费心去讨论的原因 我不能这样做 我没想到会出现这个问
  • 在交叉过滤器中过滤多个离散值

    有没有人有办法过滤交叉过滤器 https github com square crossfilter wiki API Reference多个值的对象维度 就像是 filterExact cash visa or filter cash v
  • Android - 在相对布局的ImageView中居中Textview

    我有一个带有 ImageView 的相对布局 并且希望在活动布局 xml 文件中将 TextView 置于 ImageView 的中心 这是图像视图 然后是我为 TextView 尝试过的内容 这是相对布局的内部
  • 拖放文件上传

    因此 我正在努力寻找我正在寻找的东西以及如何实现它 我有一个基本的 PHP 文件上传器 用户按下自定义上传按钮 选择一个文件 然后使用 JS 检查更改 即用户选择文件 然后提交上传图像的表单美好的 我现在还想要一个拖放上传区域 因此 用户可
  • 查找数组中缺失的数字

    我试图找到数组中每个缺失的数字 如下所示 Array 0 gt 1 1 gt 2 2 gt 3 3 gt 4 4 gt 5 5 gt 6 6 gt 7 7 gt 8 8 gt 9 9 gt 10 10 gt 11 11 gt 12 12 g
  • 如何在asp.net core rc2中获取控制器的自定义属性

    我创建了一个自定义属性 AttributeUsage AttributeTargets Method AttributeTargets Class public class ActionAttribute ActionFilterAttri
  • Angular-xeditable 可编辑 (Bs​​3),带有日期和 ng-repeat

    我尝试扩展 Angular xeditable 可编辑行 Bs3 的特定示例 添加字段 出生日期 我创建了一个 jsfiddle 来描述问题 http jsfiddle net ffgj62q0 http jsfiddle net ffgj
  • neo4j 在从 csv 导入期间指定数据类型

    有没有办法在导入时告诉neo4j值的类型 例如 neo4j 是否知道 2015 0104T10 33 44 是日期还是字符串 thanks Neo4j 使用 Java 原始类型 字符串或数组作为属性值 没有日期类型 所以 2015 0104
  • ssh-add,自动添加私钥

    我有一个公私 ssh 密钥对 由ssh keygen without密码 我将它与我的 bitbucket 帐户一起使用 特别是与 Mercurial 存储库一起使用 通常我在我的家庭工作电脑中手动添加私钥 使用ssh add ssh id
  • 获取屏幕分辨率作为cmd中的变量

    我需要一个脚本来根据所使用的屏幕分辨率复制特定图像 到目前为止我发现wmic desktopmonitor get screenheight给了我适当的输出 但我在将其解析为可用变量时遇到问题 问题是输出分为三行 我只需要第二行的信息 有人
  • 从详细信息选项卡中获取文件描述

    我希望能够从 dll 或 sys 文件的详细信息选项卡中获取文件描述字符串 我尝试过多种方法来做到这一点 但无法让它们点击 无论如何 是否可以通过命令行执行此操作 使其在屏幕上生成输出 我对使用 VB 提供的 FileVersion des
  • 判断鼠标是否位于表单上方的最佳方法是什么?

    我想通了如何捕获鼠标点击 https stackoverflow com questions 2866936 how can i add an event handler to an event by name覆盖整个表单 但此方法不能很好
  • 从 file:// 方案运行的应用程序出现 CORS 错误

    我有一个 AngularJS Cordova 应用程序 它轮询远程服务器上的 JSON 服务 http method GET url http example com index php 在浏览器中开发并在我的 Intranet apach