http - Ionic2,Angular2 :How to avoid CORS issue while using http get for REST API service call?

标签 http ionic2 cors angular2-services

我的后端在我有 url 的某个远程服务器上。我需要使用 HTTP GET 和 POST 方法将数据从那里呈现到我的 Ionic2、Angular2 项目中。但是当我尝试进行服务调用时出现此错误:

XMLHttpRequest cannot load http://192.162.91.159:8080/movieengine2/api/search/getMoviedetails. Response to preflight request doesn't pass access control check:No 'Access Control-Allow-Origin' header is present on the Requested resource.Origin 'http://localhost:8100' is therefore not allowed access/

我在互联网上搜索了很多,但大多数论坛都太旧了。 我提到了以下内容:

Angular 2 - No 'Access-Control-Allow-Origin' header is present on the requested resource

https://forum.ionicframework.com/t/cors-problem-with-ionic-2-and-angular-2-no-access-control-allow-origin-header-is-present-on-the-requested-resource/58350/6

https://forum.ionicframework.com/t/ionic-2-cors-issue/59815

https://github.com/angular/angular/issues/13554

这是我的服务文件中的内容

import { Injectable } from '@angular/core';
import { Http, Headers, Response, RequestOptions, BaseRequestOptions } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/do';
import 'rxjs/add/operator/catch';

@Injectable()
export class TestService {
  backendUrl:string='';
  parameters: RequestOptions;

  constructor(public http: Http) {
    console.log('Hello TestService Provider');
  }

  private extractData(res: Response) {
    let body = res.json();
    return body || {};
  }

  private handleError(error: Response){
    return Observable.throw(error.json().error || 'Server Error')
  }


  get(url, params) 
  {
     var headers = new Headers
      ({
     'X-Requested-With': 'XMLHttpRequest'
      });
      headers.append("Accept", 'application/json');
     headers.append('Content-Type', 'application/json' );
      let options = new RequestOptions({ headers: headers });

        this.backendUrl='http://192.162.91.159:8080/movieengine2/api/search/'+url;
        return this.http.get(this.backendUrl).map(this.extractData).catch(this.handleError);
  }

我什至尝试在我的 ionic.config.json 中添加它

"proxies": [
{
    "path": "/api",
    "proxyUrl": "http://api.steampowered.com"
}

]

有人能告诉我如何避免这个问题吗? 我想要一个可以在设备或浏览器上运行的永久解决方案。提前致谢。这些是我正在使用的版本。

"cors": "^2.8.3",
"ionic-angular": "2.1.0",
"ionic-native": "2.4.1",
"ionicons": "3.0.0",
"rxjs": "5.0.0-beta.12",
"sw-toolbox": "3.4.0",
"underscore": "^1.8.3",
"zone.js": "0.6.26"

我找不到适合我使用的版本的解决方案。

最佳答案

有 4 种方法可以解决这个问题:

  1. 您可以设置代理(read this tutorial)

  2. 您可以通过模拟器或手机运行您的应用(不方便)

  3. 您可以通过安装 cordova Whitelist plugin 解决 CORS 问题

  4. 您也可以尝试安装 Chrome Allow-Control-Origin extension .

关于http - Ionic2,Angular2 :How to avoid CORS issue while using http get for REST API service call?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43409339/

相关文章:

Angular 发出两次 http 请求

ionic2 - ionic 2 datetime 显示当前日期到 future 日期并专注于今天的日期

angular - ionic 2 的 ConnectionBackend 没有提供者

c# - 使用多个主机设置 CORS 配置

Python http 错误日志记录

node.js - 请求发送时间过长。为什么会这样?

安卓 8 : Cleartext HTTP traffic not permitted

html - 在行的背景图像上重叠列

导致 PREFLIGHT 的 HTTP header - 说明?

cordova - Meteor cordova 不允许 CORS