Angular - 被 CORS 策略阻止:“Access-Control-Allow-Origin”标头包含多个值“*、*”

SK.*_*SK. 6 cors typescript angular

当我尝试连接到另一个域中的 REST 服务时出现错误。我知道可以通过在java Rest服务中添加CORS来解决。但是可以通过改变 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 '*, *'
Run Code Online (Sandbox Code Playgroud)

我的休息服务:http://someurl/RestWeb/getPerson,我所有的休息服务网址如下:http://someurl/RestWeb/SOMETHING

我的 Angular 网址:http://someotherurl

在搜索不同的文章后,我已经尝试更改proxy.conf.jsonpackage.json。下面是我的更改,但我仍然得到相同的结果。

代理.conf.json

{
  "/RestWeb": {
    "target": "http://someurl/",
    "secure": false,
    "changeOrigin": true  // I tried with and without this. No luck
  }
}
Run Code Online (Sandbox Code Playgroud)

包.json

"start": "ng serve --proxy-config proxy.conf.json",
Run Code Online (Sandbox Code Playgroud)

服务:

  findAll(): Observable<Person[]> {
    return this.httpClient.get<string[]>('http://someurl/RestWeb/getPerson');
  }
Run Code Online (Sandbox Code Playgroud)

运行使用:

npm start
Run Code Online (Sandbox Code Playgroud)

作为临时对策,现在我正在使用 chrome 浏览器测试我的应用程序

chrome.exe --user-data-dir="C://Chrome dev session" --disable-web-security
Run Code Online (Sandbox Code Playgroud)

小智 3

看来 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": ""
    }
  }
}

Run Code Online (Sandbox Code Playgroud)

person.service.ts

import { 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()
    );
  }
}
Run Code Online (Sandbox Code Playgroud)