typescript - Angular - bloqueado por la política CORS: El encabezado 'Access-Control-Allow-Origin' contiene múltiples valores '*', '*'
Recibo un error cuando intento conectarme a un servicio REST que está en otro dominio. Entiendo que se puede resolver agregando CORS en el servicio REST de Java. Pero, ¿sería posible hacerlo cambiando algo en el lado de Angular?
Access to 'http://someurl/RestWeb/getPerson' XMLHttpRequest at from origin 'http://localhost:4200' has been blocked by CORS policy: The 'Access-Control-Allow-Origin' header contains multiple values '*, *'
Mi servicio Rest: http://someurl/RestWeb/getPerson, todos mis URLs de servicio rest son como: http://someurl/RestWeb/SOMETHING
Y mi URL de Angular: http://someotherurl
Después de buscar en diferentes artículos, ya intenté cambiar proxy.conf.json y package.json. A continuación mis cambios, todavía estoy obteniendo lo mismo.
proxy.conf.json
{
"/RestWeb": {
"target": "http://someurl/",
"secure": false,
"changeOrigin": true // I tried with and without this. No luck
}
}
package.json
"start": "ng serve --proxy-config proxy.conf.json",
servicio :
findAll(): Observable<Person[]> {
return this.httpClient.get<string[]>('http://someurl/RestWeb/getPerson');
}
ejecutar usando:
npm start
Como medida temporal, ahora estoy probando mi aplicación en el navegador Chrome usando
chrome.exe --user-data-dir="C://Chrome dev session" --disable-web-security
Respuesta #1
Parece que se ha hecho un uso indebido del proxy de webpack-dev-server.
proxy.conf.json{
"/api": {
"target": "http://someurl.com/",
"changeOrigin": true,
"secure": false,
"pathRewrite": {
// replace `/api` with empty string, because real api path isn't contain
// `/api` segment
// eg: http://localhost:4200/api/getPerson => http://someurl.com/getPerson
"/api": ""
}
}
}
person.service.tsimport { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
@Injectable()
export class PersonService {
constructor(private http: HttpClient) {}
async getPerson() {
return (
this.http
// you shouldn't use `http://someurl.com/getPerson` url directly,
.get('/api/getPerson')
.toPromise()
);
}
}
Respuesta #2
En tu archivo de configuración del proxy, estás configurando el proxy para tu http://localhost:4200/api*. Por lo tanto, el proxy no funcionará para /getPerson
