没有使用 Angular + WordPress 的“Access-Control-Allow-Origin”标头

Posted

技术标签:

【中文标题】没有使用 Angular + WordPress 的“Access-Control-Allow-Origin”标头【英文标题】:No ‘Access-Control-Allow-Origin’ header is present using angular + WordPress 【发布时间】:2019-11-17 23:17:58 【问题描述】:

当我在 woocommerce api 中使用 POST 方法发布数据时。我遇到了 cors 问题

从源“http://localhost:8100”获取“http://localhost/wordpress/wc-api/v3/customers?oauth_consumer_key=ck_64d88e1fa3516e9f5a06b6053f02976a534d3f8f&oauth_nonce=zsu3ysEnFHhvrZt4Nc7H66Dgu28H20K7&oauth_signature_method=HMAC-SHA256&oauth_timestamp=1562587817&oauth_version=1.0&oauth_signature=KtFxvyQNklUlfCi6rNWyJ0DEJ6AS2ZbwbO44u%2FEqxG4%3D”的访问权限已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:它没有 HTTP ok 状态。

【问题讨论】:

【参考方案1】:

如果您的服务器与您发出这些请求的应用程序位于不同的域中,则您必须在对服务器的每个请求上设置一个 Access-Control-Allow-Origin 标头(服务器将其设置为响应标头)。添加该标头会告诉系统允许外部域“localhost:8100”发出这些请求。

您无法在普通浏览器中规避此要求,因为它是减少 CORS 攻击的内置安全功能

附言。同一域上的不同端口被认为是不同的域。因此,如果您向 example.com:8100 发出请求,example.com 将收到 401 错误。 localhost 或任何其他域也是如此。

来自 Apache2 Web 服务器 .conf 文件的示例代码,我个人用来设置这些标头。

SetEnvIf Origin "^http(s)?://(.+\.)?(staging.\xxx\.com|xxx\.com|xxx\.local|xxx\.local:4200|a2\.local)$" origin_is=$0
Header always set Access-Control-Allow-Origin %origin_ise env=origin_is

只需将 xxx.com 域替换为 localhost:8100 或该数组中您需要的任何其他内容。 (如果您使用的是 Apache Web 服务器)

因此,Chrome 网络选项卡应在请求上附加一个 Access-Control-Allow-Origin 标头

【讨论】:

以上是关于没有使用 Angular + WordPress 的“Access-Control-Allow-Origin”标头的主要内容,如果未能解决你的问题,请参考以下文章

Angular,woocommerce,wordpress JWT AUTH 登录错误,不正确的 200 OK 来自服务器的响应可能破坏登录尝试

Angular GET 请求错误,但仅在 Safari iOS 上

如何使用 WordPress REST api 返回某个月份的所有帖子

在 Angular 2 中使用 *ngFor 和 JSON 对象

如何在 Ionic 无限滚动中从 Wordpress API 输出累积列表

wordpress有没有支付宝 微信的支付插件