我有一个AngularJS/Cordova应用程序,可以在远程服务器上轮询JSON服务:
$http({method: 'GET', url: 'http://example.com/index.php'})
在浏览器中开发并运行我的内部网apache服务器(http://dev
)我得到“不存在“访问控制允许源站”标题”,因此我通过添加以下内容来解决此问题:
Header set Access-Control-Allow-Origin "http://dev"
所有工作正常,我看到Origin: http://dev
在我的Chromedev工具。
所以,第一次考虑这个问题,我想知道当应用程序在Android/iOS网络视图中运行时,起源会是什么。我决定在我的设备上进行构建和部署,并期望在远程调试中看到相同的错误(SafariiOS和Weinre为Android),但令我惊讶的是,它可以工作(不发送任何CORS头)!我还发现,在这两个设备的应用程序运行在webview下的文件://方案,而不是(我假设)由手机操作系统提供的某种超文本传输协议服务器。
因此,研究似乎表明,文件://不需要CORS,这样的“站点”可以访问任何域上的任何XHR资源。但是,当我在桌面浏览器上测试这一点时,我发现Safari不需要文件://需要CORS,但Chrome需要,FireFox也可以在没有CORS的情况下工作
所以我的问题是:
1)为什么我的应用程序在Android/iOS中没有CORS工作-是因为CORS不适用于file://,还是Cordova正在做一些事情使其在设备中工作?
我有
2)如果,等待回答Q1,我应该想在安全的网站上,并明确允许来自应用程序的请求,你给文件://主机的访问控制允许原产地值是多少?在我的调试中,文件://的请求中没有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:
访问控制允许源:
(允许所有主机)源标题中
对于
文件://
URL,它们将生成一个空源文件
,无法通过第二个选项(回显)进行授权。
如上所述:
跨域策略不适用于PhoneGap(出于各种原因,基本上是因为您的应用程序基本上是在设备上运行文件://URI)。
请注意,您必须为您的应用程序设置一个白名单才能访问这些外部域。
至于Chrome问题,可以在开发人员的控制台中看到:
加载资源失败:::ERR_FILE_NOT_FOUNDfile:///C:/2.html
XMLHttpRequest无法加载file:///C:/2.html.收到无效响应。因此,不允许访问源'null'。
讨论了Chromium项目的问题跟踪程序#40787。他们将这些问题标记为无法修复,因为这种行为是设计造成的。
有一种解决方案建议,为了开发目的,只需关闭Chrome中的CORS,在Chrome中启动
——允许从文件访问文件——禁用web安全
e、 g.窗户
`C:\Users\YOUR_USER\AppData\Local\Google\Chrome\Application\chrome.exe --allow-file-access-from-files --disable-web-security`
以下是一些与科尔多瓦相关的回答:
CORS和phonegap应用程序
- Apache Cordova中的域白名单-控制对外部域的访问的安全模型
有关CORS的更多信息,请查看这些资源:
跨源资源共享和文件://
- 一个不错的CORS教程:http://www.html5rocks.com/en/tutorials/cors/
- 围绕原产地政策工作
- HTTP权限改造(CORS)(Mozilla)
还请检查CORS的浏览器支持:
http://caniuse.com/#feat=cors
并记录W3C上的正式CORS规范:)
每当我尝试运行我的应用程序时,屏幕截图中的窗口就会弹出。声明找不到默认活动,因此我无法部署我的应用程序: 我的代码清单文件 这就是我点击运行时得到的窗口- 我的代码的Gradle文件:
当我使用 在intelij运行期间,一切正常。 在jar的案例中,我尝试了: 等等。它们导致正确的路径,例如: > 文件:/D:/Projects/myProject/target/classes/static/assets/config/fileName(对于toExternalForm) /D: /Projects/myProject/target/classes/static/assets/
在我的Java应用程序中,我想运行一个批处理文件,该批处理文件调用“” 似乎我甚至不能让我的批处理文件执行。我没主意了。 这是我用Java写的: 以前,我有一个我想运行的Python Sconscript文件,但由于它不起作用,我决定通过批处理文件调用脚本,但该方法尚未成功。
我想从我的javaFX项目创建exe文件。我已经将我的项目导出到可运行的jar文件中,用launch4j将其更改为exe,但当我用命令promp运行jar文件时,它显示“错误:缺少JavaFX运行时组件,运行此应用程序需要这些组件” 当我导出到时。jar最后警告了多行的“重复条目:module info.class”。这是原因吗?
每当我想在jackson对象映射器中包装一些数据时,我会得到一个运行时错误,其中包含以下消息: 07-07 17:44:59.049 196 42-20156/com.app.teamchannel e/androidruntime:致命异常:SyncAdapterThread-1 java.lang.verifyerror:org/codehaus/jackson/map/objectmappe
问题内容: 在我的Java应用程序中,我想运行一个名为 的批处理文件 看来我什至无法执行我的批处理文件。我没主意了。 这就是我在Java中所拥有的: 以前,我有一个要运行的Python Sconscript文件,但由于该文件不起作用,我决定通过批处理文件调用该脚本,但该方法到目前为止尚未成功。 问题答案: 批处理文件不是可执行文件。他们需要一个应用程序来运行它们(即cmd)。 在UNIX上,脚本文