角 JS。预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段 Access-Control-Allow-Origin

Posted

技术标签:

【中文标题】角 JS。预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段 Access-Control-Allow-Origin【英文标题】:Angular JS. Request header field Access-Control-Allow-Origin is not allowed by Access-Control-Allow-Headers in preflight response 【发布时间】:2018-03-02 09:35:22 【问题描述】:

我已经尝试了所有的东西,使用CORS 插件。禁用 chrome 中的网络安全。 响应来自POSTMAN,但无法在$http 中获取。

$http(
  url: "https://interview-api-staging.bytemark.co/books",
  method: 'GET',
  headers: 
    'Access-Control-Allow-Origin': '*',
    'Access-Control-Allow-Methods': 'OPTIONS,POST,GET,OPTIONS,PUT,DELETE',
    'Access-Control-Allow-Headers': 'Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,Keep-Alive,X-Requested-With,If-Modified-Since'
  
).then(function(d) 
  console.log(d);
);

【问题讨论】:

“无法获取”是什么意思?您收到错误响应吗?控制台中是否打印任何内容? 【参考方案1】:

客户端与它无关。使用 CORS 标头,您是在告诉客户端我信任哪些其他服务器。然后他们可以共享您的资源,客户不会介意。

例如,如果您告诉客户您有两个域,以便让您的资源由您的第二个网站使用,您并没有说我信任您作为客户。

所以你保护的是服务器,而不是客户端。您不希望 AJAX API 端点可以通过托管在世界任何地方的脚本进行访问。

客户不会因此而获得/失去任何东西。它只是对服务器的一种保护,因为使用 AJAX 所有 URL 对任何人都是清晰可见的,如果没有这种保护,任何人都可以使用您的 API 继续运行他们的前端,只有服务器必须从中丢失,所以他们可以决定谁可以使用他们的资源。

source.

如上所述,您不需要在前端做任何与 cors 相关的事情。确保 cors 标头是从后端在其响应标头中发送的。

服务器必须保护自己,所以他们必须告诉客户端一些规则,哪个客户端将遵循。默认情况下,客户端将接受所有内容。

【讨论】:

【参考方案2】:

在您的后端使用CORS。否则,您可以在 Chrome 网上应用店中查看Allow-Control-Allow-Origin: *,使用chrome extension

当您尝试使用 Angular 应用程序时,您需要打开该扩展程序。

否则您需要在后端应用程序中激活 CORS

【讨论】:

以上是关于角 JS。预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段 Access-Control-Allow-Origin的主要内容,如果未能解决你的问题,请参考以下文章

角 POST 请求被 CORS 策略阻止:对预检请求的响应未通过访问控制检查

React.js + PHP/Apache:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段内容类型

被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:没有“Access-Control-Allow-Origin”标头

预检响应在 Angular Js1 和 Webapi 2 上具有无效的 HTTP 状态代码 405

节点 JS - CORS 对预检请求的响应未通过访问控制检查:“Access-Control-Allow-Origin”标头的值

在带有 Wcf 服务的 Angular JS 的预检响应中,Access-Control-Allow-Methods 不允许方法 PUT