Как добавить запрос CORS в заголовок в Angular 5

я добавил CORS в заголовок, но я все еще получаю проблему CORS в моем запросе. Как правильно добавлять и обрабатывать CORS и другие запросы в заголовках?

вот код файла сервиса:

import { HttpClient, HttpHeaders, HttpClientModule } from '@angular/common/http';
const httpOptions = {
  headers: new HttpHeaders({ 
    'Access-Control-Allow-Origin':'*',
    'Authorization':'authkey',
    'userid':'1'
  })
};

public baseurl = 'http://localhost/XXXXXX';

userAPI(data): Observable<any> {
  return this.http.post(this.baseurl, data, httpOptions)
    .pipe(
      tap((result) => console.log('result-->',result)),
      catchError(this.handleError('error', []))
    );
}

ошибка:

ответ на запрос preflight не проходит проверку контроля доступа: заголовок "Access-Control-Allow-Origin" отсутствует на запрошенном ресурсе. Происхождение'http://localhost:4200' не разрешенный доступ

failed: Http failure response for (unknown url): 0 неизвестная ошибка

в моем коде на стороне сервера я добавил CORS в индексный файл.

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token');

6 ответов


CORS (Cross-Origin Resource Sharing) - это способ для сервера сказать: "я приму ваш запрос, даже если вы пришли из другого источника."Это требует сотрудничества с сервером – поэтому, если вы не можете изменить сервер (например, если вы используете внешний API), этот подход не будет работать.

измените сервер, чтобы добавить заголовок Access-Control-Allow-Origin: * чтобы включить перекрестные запросы из любого места (или указать домен вместо *).


по моему опыту Плагины работали с HTTP, но не с последним httpClient. Кроме того, настройка заголовков ответов CORS на сервере на самом деле не была опцией. Итак, я создал proxy.conf.json файл для работы в качестве прокси-сервера.

подробнее об этом здесь.

:

{
  "/posts": {
    "target": "https://example.com",
    "secure": true,
    "pathRewrite": {
    "^/posts": ""
  },
    "changeOrigin": true
  }
}

я поставил proxy.conf.json файл рядом с package.json файл в том же каталоге.

затем я изменил команду start в пакет.файл json:

"start": "ng serve --proxy-config proxy.conf.json"

вызов HTTP из моего компонента приложения:

return this._http.get('/posts/pictures?method=GetPictures')
.subscribe((returnedStuff) => {
  console.log(returnedStuff);
});

наконец, чтобы запустить мое приложение, я должен использовать npm start или ng serve --proxy-config proxy.conf.json


пожалуйста, импортируйте requestoptions из angular cors

    import {RequestOptions, Request, Headers } from '@angular/http';

и добавьте параметры запроса в свой код, как показано ниже

    let requestOptions = new RequestOptions({ headers:null, withCredentials: 
    true });

отправить запрос в вашем запросе api

фрагмент кода ниже-

     let requestOptions = new RequestOptions({ headers:null, 
     withCredentials: true });
     return this.http.get(this.config.baseUrl + 
     this.config.getDropDownListForProject, requestOptions)
     .map(res => 
     {
      if(res != null)
      { 
        return res.json();
        //return true;
      }
    })
  .catch(this.handleError);
   }  

и добавьте CORS в свой бэкэнд PHP-код, где все запросы api будут приземляться первыми.

попробуйте это и дайте мне знать, если он работает или нет, у меня была такая же проблема, я добавлял CORS из angular5, который не работал, тогда я добавил CORS для бэкэнда, и это сработало для меня


сделайте заголовок похожим на этот для HttpClient в NG5:

let httpOptions = {
      headers: new HttpHeaders({
        'Content-Type': 'application/json',
        'apikey': this.apikey,
        'appkey': this.appkey,
      }),
      params: new HttpParams().set('program_id', this.program_id)
    };

вы сможете сделать вызов api с вашим url-адресом localhost, он работает для меня ..

  • пожалуйста, не забывайте свои параметры columnd в заголовке: например, params: new HttpParams ().set ('program_id', this.program_id)


сообщение с httpClient в Angular 6 также выполняло запрос опций:

Общие Заголовки:

Request URL:https://hp-probook/perl-bin/muziek.pl/=/postData
Request Method:OPTIONS
Status Code:200 OK
Remote Address:127.0.0.1:443
Referrer Policy:no-referrer-when-downgrade

мой сервер Perl REST реализует запрос опций с кодом возврата 200.

заголовок следующего запроса POST:

Accept:*/*
Accept-Encoding:gzip, deflate, br
Accept-Language:nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4
Access-Control-Request-Headers:content-type
Access-Control-Request-Method:POST
Connection:keep-alive
Host:hp-probook
Origin:http://localhost:4200
Referer:http://localhost:4200/
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.109 Safari/537.36

уведомление Access-Control-Request-Headers: content-type.

Итак, мой бэкэнд Perl скрипт использует следующие заголовки:


 -"Access-Control-Allow-Origin" => '*',
 -"Access-Control-Allow-Methods" => 'GET,POST,PATCH,DELETE,PUT,OPTIONS',
 -"Access-Control-Allow-Headers" => 'Origin, Content-Type, X-Auth-Token, content-type',

С этой настройкой GET и POST работали для меня!