首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从文件://方案运行的应用程序出现CORS错误

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

Stack Overflow用户
提问于 2014-09-18 21:28:38
回答 1查看 24.9K关注 0票数 19

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

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

在浏览器中进行开发并在我的内部网apache服务器(http://dev)上运行时,我得到"No 'Access-Control-Allow-Origin‘header is present“,所以我通过添加以下命令来解决这个问题:

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

一切正常,我在Chrome开发工具中看到了Origin:http://dev

所以,我不得不第一次考虑这个问题,我想知道当这个应用程序在Android/iOS webviews中运行时,它的原点是什么。我决定在我的设备上进行构建和部署,并期望在远程调试中看到相同的错误( iOS的Safari和Android的Weinre ),但令我惊讶的是,它可以工作(不发送任何CORS头)!我还发现,在这两种设备中,应用程序都运行在webview中的file:// scheme下,而不是(我假设的)手机操作系统提供的某种http服务器。

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

所以我的问题是:

1)为什么我的应用程序在安卓/iOS中没有CORS -是因为CORS不适用于file://,,还是科尔多瓦正在做一些事情让它在设备上工作?

我的配置中有<access origin="*"/>

2)如果等待Q1的回答,我应该在安全的站点上,并显式地允许来自应用程序的请求,那么您给文件://“主机”的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. 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-18 22:00:39

CORS报头有两种方式表示应该允许跨域XHR:

  • 发送Access-Control-Allow-Origin: * (允许所有主机)
  • 将您希望允许的主机放入您的后端

Origin标头中

对于file:// URL,它们将生成一个 Origin,该URL不能通过第二个选项(回显)进行授权。

作为mentioned

跨域策略不适用于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 project's issue tracker, #40787上有一个讨论。他们将问题标记为无法修复,因为该行为是故意发生的。

为了开发的目的,可以简单地关闭Chrome中的CORS,从使用--allow-file-access-from-files --disable-web-security的chrome开始

例如,用于Windows

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

下面是一些更多与cordova相关的答案:

有关CORS的更多信息,请查看以下资源:

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

对于记录formal CORS specification on W3C :)

票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25914071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档