Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular ionic应用程序被CORS策略阻止,jsonp也不工作_Angular_Ionic Framework_Cors - Fatal编程技术网

Angular ionic应用程序被CORS策略阻止,jsonp也不工作

Angular ionic应用程序被CORS策略阻止,jsonp也不工作,angular,ionic-framework,cors,Angular,Ionic Framework,Cors,我正在用angular 5开发一个Ionic应用程序,我使用命令Ionic serve-l 我接到一个外网的get电话 但我收到了CORS拒绝的信息,没有回应 加载失败:从“”重定向到“”已被CORS策略阻止:请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源“” 请求代码很简单: getSomethingList(req1: number, req2: number): Observable<Item[]> { const

我正在用angular 5开发一个Ionic应用程序,我使用命令
Ionic serve-l

我接到一个外网的get电话

但我收到了CORS拒绝的信息,没有回应

加载失败:从“”重定向到“”已被CORS策略阻止:请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源“”

请求代码很简单:

getSomethingList(req1: number, req2: number): Observable<Item[]> {
    const requestUrl = 'https://example.com/api?req1=foo&req2=bar';
    return this._http.get(requestUrl).map((res: Response) => res.json());
}
然后更改了
const requestUrl=https://example.com/api?req1=foo&req2=bar“
to
const requestUrl=”/api?req1=foo&req2=bar“
,我仍然不知道我在用它做什么,对我来说它毫无意义,但这是我在阅读一些教程时理解的

很明显,这样我就得到了错误:

获取404(未找到)

我试图安装nom corsproxy:
npm安装-g corsproxy
并在命令行中运行corsproxy。这从服务器的端口开始。但这不起作用。我甚至尝试将corsproxy与ionic.config.json文件中的代理混合使用,但没有办法。永远得不到答案

最后,我尝试使用jsonp:

  • 第一个I
    从'@angular/http'导入{JsonpModule}在app.module.ts中,我在导入中声明JsonpModule

  • 然后在我有请求的提供者中,我注入Jsonp库
    构造函数(私有Jsonp:Jsonp){}

  • 我在请求url的末尾添加了一个回调:
    const-requestUrl=https://example.com/api?req1=foo&req2=bar&callback=JSONP_CALLBACK“

  • 更改请求方法: 返回这个.jsonp.request(requestUrl.map)((res:Response)=>res.json())

对于jsonp,控制台中的错误是:

未捕获的语法错误:意外标记:

我不知道还有什么可以尝试的,因为CORS,我无法得到任何回应。我请求的api不受限制,就像响应postman一样,甚至可以直接在浏览器中写入请求url。但是当从localhost运行时,它显然被阻塞了,我无法克服它,我正在浪费大量的时间试图获得响应。我需要一些帮助

  • 离子型:3.20.0
  • 科尔多瓦
  • 角度CLI:1.7.3
  • 节点:8.9.4
仅供参考:我使用的api是

编辑: 已安装cordova插件白名单

添加到www/index.html

文件config.xml包含以下行:

<content src="index.html" />
<access origin="*" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-navigation href="*" />

在proxy change Config.xml文件中,添加新的配置属性:

<allow-navigation href="http://*/*" />
<allow-intent href="https://*/*" />

或者,如果这不起作用,您可以安装cordova,然后添加“cordova插件添加cordova插件白名单”:

1-将
添加到config.xml


2-将
添加到index.html的标题中必须在服务器端正确处理CORS。当您没有服务器端时,您只能为COR设置一个代理,以正确处理来自应用程序的请求,并将它们重定向到api(一个简单的php脚本就可以了),但有许多现成的解决方案

你不能禁用CORS。这是来自底层webview的安全“功能”

对于npm corsproxy的具体问题,请尝试

  • 不要使用离子代理设置
  • 在命令行上运行corsproxy
  • 将api调用更改为my.domain.com/。。是您在ComicLine上已经使用的服务器和路径

  • 当这不起作用时,请尝试“即用解决方案”列表中的内容

    最后我解决了这个问题,首先我将所有代码返回到初始点(删除所有代理引用、jsonp等),在那里我得到了CORS拒绝回答。然后我删除了chrome分机
    Moesif Origin&CORS changer
    并安装了chrome分机,打开它,现在它工作正常


    也许这对将来的某个人会有所帮助,并为他/她节省大量时间。

    我本来打算将这些行添加到config.xml中,但它们已经存在了。我也在使用cordova,所以我安装了
    cordova插件白名单
    ,并添加了两个点,仍然是相同的CORS错误。我添加了编辑问题的更改。好的,我运行corsproxy(在1337端口上运行),并请求
    http://localhost:1337/www.comicvine.com/api/characters?api_key=myapikey&format=json
    但我仍然遇到cors拒绝问题<代码>加载失败http://comicvine.gamespot.com/api/characters?api_key=myapikey&format=json: 重定向自'http://comicvine.gamespot.com/api/characters?api_key=myapikey&format=json“到”https://comicvine.gamespot.com/api/characters?api_key=myapikey&format=json'已被CORS策略阻止:请求的服务器上不存在'CORS'头资源。因此不允许访问源“null”。
    在运行corsproxy的终端中,我可以读取:
    代理到https://www.comicvine.com/api/characters 180421/104124.918[答复],http://localhost:1337: get/api/characters{“api_key”:“myapikey”,“format”:“json”}301(576ms)
    我更改了apikey这个词的api键,我的请求有额外的参数,如限制和偏移量,我试图简化它一点。
    <allow-navigation href="http://*/*" />
    <allow-intent href="https://*/*" />