Проблема с CORS для колбы - запрос опции не передан - PullRequest
0 голосов
/ 02 марта 2019

Я потратил три дня, чтобы исправить эту ошибку CORS, но не смог.Не могли бы вы подсказать мне, как решить эту проблему?

Я настроил Angular (внешний интерфейс) + Flask (внутренний API) на той же локальной машине с док-контейнерами.(Ubuntu 16.04)

Докер # 1 : колба с портом 5000 открыта.-> Выполнено с manage.py --host 0.0.0.0 для внешнего доступа.

Docker # 2 : угловое приложение с портом 4200 открыто.-> Выполнено с ng serve --port 0.0.0.0 для внешнего доступа.

curl --user username:password http://127.0.0.1:5000/v1/classes/ преуспел в моем хост-ПК и внутри углового док-контейнера.Также перейдите по URL-адресу в браузере Chrome.

Но я встретил ошибку CORS для ОПЦИИ, когда попытался вызвать get api в угловом коде;

OPTIONS http://127.0.0.1:5000/v1/classes/ 401 (UNAUTHORIZED)
Access to XMLHttpRequest at 'http://127.0.0.1:5000/v1/classes/' from origin 'http://localhost:4200' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.

Вот мой угловой сервискод;

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable, of } from 'rxjs';
import { delay, map, catchError, tap } from 'rxjs/operators';

const endpoint = 'http://127.0.0.1:5000/v1/';

const httpOptions = {
  headers: new HttpHeaders({
    'Content-Type':  'application/json',
    'Authorization': 'Basic ' + btoa('username:password')
  })
};

@Injectable()
export class ExampleCRUDService {

  constructor(private http: HttpClient) {}

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

  getClasses(): Observable<any> {
    return this.http.get(endpoint + 'classes/', httpOptions).pipe(
      map(this.extractData));
  }
}

ТЕСТ Ниже приведены мои испытания со стороны колбы, но ни одно из них не было успешным.

CORS(app)
@app.route("/")
@cross_origin()
CORS(app, resources={r"/*": {"origins": "*"}})
@app.after_request
def after_request(response):
   response.headers.add('Access-Control-Allow-Origin', '*')
   response.headers.add('Access-Control-Allow-Headers', 'Content-Type,Authorization')
   response.headers.add('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE')
   return response
app.config['CORS_HEADERS'] = 'Content-Type'
cors = CORS(app, resources={r"/v1": {"origins": "http://localhost:4200"}})

@app.route('/')
@cross_origin(origin='localhost',headers=['Content-Type','Authorization'])

CORS(app, expose_headers='Authorization')

1 Ответ

0 голосов
/ 03 марта 2019

Я удивлен, что вы столкнулись с проблемой CORS, даже если вы используете следующее:

CORS(app)

Просто попробуйте выполнить следующее:

CORS(app, origins=['127.0.0.1:4200'])

Я надеюсь, что это решит вашу проблему.Дайте мне знать, если вы все еще сталкиваетесь с проблемой.

...