Angular ionic应用程序被CORS策略阻止,jsonp也不工作
我正在用angular 5开发一个Ionic应用程序,我使用命令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
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“
toconst 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())
- 离子型:3.20.0
- 科尔多瓦
- 角度CLI:1.7.3
- 节点:8.9.4
添加到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的具体问题,请尝试
当这不起作用时,请尝试“即用解决方案”列表中的内容 最后我解决了这个问题,首先我将所有代码返回到初始点(删除所有代理引用、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://*/*" />