如何在 Woocommerce API 中添加 CORS 标头

Posted

技术标签:

【中文标题】如何在 Woocommerce API 中添加 CORS 标头【英文标题】:How to add CORS Headers in Woocommerce API 【发布时间】:2019-12-20 06:53:06 【问题描述】:

我正在尝试解决 Ajax 请求和 woocommerce API 的问题。实际上,当我请求 WC 时,缺少 CORS 标头。这是错误:

从源“https://www.client.com”访问“https://mywebsite.com/woocommerce/?wc-api=software-api&request=check&email=email&license_key=license&product_id=product”处的 XMLHttpRequest 已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。

我已经将此代码添加到我的主题 functions.php 文件中:

function add_cors_http_header()
  header("Access-Control-Allow-Origin: *");
  header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS, READ');
  header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token,authorization,XMLHttpRequest, user-agent, accept, x-requested-with');
  header("Access-Control-Allow-Credentials: true");

  if ( 'OPTIONS' == $_SERVER['REQUEST_METHOD'] ) 
    status_header(200);
    exit();
  


add_action('init','add_cors_http_header');

错误仍然存​​在。我不明白我应该将代码添加到我的响应中的位置。

编辑

这是失败的请求(来自 Chrome 开发工具):

编辑 2

也尝试在我的 .htaccess 中添加 Header set Access-Control-Allow-Origin "*",但仍然无法正常工作。

编辑 3

我尝试直接从 plesk 面板添加 Header 指令。它似乎会影响错误(YAY !!!)。当我添加Access-Control-Allow-Origin: "*" 时,现在的错误是:

【问题讨论】:

您是否检查了标头是否由您的网络服务器或代理服务器设置?我想在那种情况下你不能轻易地覆盖它们...... 不,我没有任何我可以阅读的文档吗?我对这部分真的很失望 我发现enable-cors.org/server.html 是一个很好的起点 - 如果网络服务器在您的控制之下。否则,您可能需要与您的托管公司联系。 响应的 HTTP 状态码是什么?您可以使用浏览器开发工具中的网络窗格进行检查。是 4xx 还是 5xx 错误而不是 200 OK 成功响应?它是对 CORS preflight OPTIONS 请求的响应吗? @user127091 感谢提供链接,我会更深入地检查并尝试联系 OVH (Hoster) 【参考方案1】:

根据@user127091 的评论,我通过将标头直接添加到服务器配置(在我的情况下为 Plesk)解决了这个问题。

【讨论】:

请详细说明如何将哪一行添加到哪个文件中?

以上是关于如何在 Woocommerce API 中添加 CORS 标头的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 woocommerce rest api 在 json 文件中发布 line_items?

是否可以添加使用 WooCommerce 授权的新 API 端点?

如何在 JEST 中使用配置模拟 API 调用?

Woocommerce 购物车休息 API

带有 WooCommerce 身份验证的 WordPress 自定义 API

我如何更好地在 woocommerce rest api 中按类别对产品进行分组?