【问题标题】:Angular2 CORS issue on localhost [duplicate]本地主机上的Angular2 CORS问题[重复]
【发布时间】:2018-08-13 00:19:44
【问题描述】:
Failed to load URL: 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:4200' is therefore not allowed access.

是否可以在不更改服务器端代码(Java Spring 控制器)的情况下从 Angular2 修复此问题?

我的代码

const headers = new Headers({'Content-Type': 'application/json',
    'Access-Control-Allow-Origin' : '*'
});
return this.http.get(url, {headers: headers})
  .toPromise()
  .then(response => response.json().data as Hero[])
  .catch(this.handleError);

【问题讨论】:

  • 想象一下你可以绕过客户端的 CORS...
  • 不,这不能从客户端绕过,图像您可以,攻击者在您登录时使用它来读取您的银行网站。

标签: javascript java angular cors


【解决方案1】:

您的后端似乎不接受跨域请求。

为了让它在 Angular 上工作,您必须使用代理,以便您的前端和后端使用相同的域(相同的主机名和相同的端口)

在开发模式下,您可以使用proxy.config.json 文件设置代理。假设您的后端托管在your-domain.com:80,并且您的后端请求以/backend 开头,则此文件将包含类似

{
    "/backend/*":{
        "target": "your-domain.com",
        "secure": false,
        "logLevel": "debug"
    }
}

通过更改 package.json 中的以下配置,使您的开发 HTTP 服务器使用此文件

 "scripts": {
    "start": "ng serve --proxy-config proxy.config.json",
  }

不要忘记使用http://localhost:4200/backend/... 之类的请求而不是http://your-domain.com/... 来调用您的后端

为了让它在远程服务器上工作,你必须在你的 Java Web 应用程序(例如 nginx 或 Apache)上设置一个 HTTP 服务器,配置为与前面解释的一样。

【讨论】:

  • { "/api/*":{ "target": "example.com", "secure": false, "logLevel": "debug" } 我也为 http 请求添加了标头。仍然面临问题}
  • 您是否使用npm run start 启动您的前端? (不仅仅是ng serve)你说你仍然面临这个问题,我假设你仍然有关于CORS的错误消息,你是否将所有请求都更改为http://localhost:4200/api/...
  • 您的 JSON 配置中还有一个不需要的分号
  • 我删除了那个分号。您是否将所有请求都更改为localhost:4200/api...?对不起,我没有得到这个。你能详细说明一下吗?
  • 好的,我刚刚注意到您的问题与@Ferrybig 评论有关。那么答案是,使用代理,您可以保留访问控制标头带来的保护,并且您的 API 仍然无法被其他网站的恶意 javascript 代码访问
猜你喜欢
  • 2018-07-09
  • 2016-09-20
  • 1970-01-01
  • 2020-12-22
  • 2020-04-30
  • 2011-05-30
  • 1970-01-01
  • 2015-10-15
  • 2017-08-06
相关资源
最近更新 更多