You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress自定义CORS header未授权问题求助

解决FaustWP授权接口x-faustwp-secret headers is not authorized错误及CORS问题

问题场景

使用JavaScript fetch请求FaustWP授权接口时,返回错误x-faustwp-secret headers is not authorized,请求代码如下:

let response = await fetch('https://mywebsite.com/?rest_route=/faustwp/v1/authorize', {
    headers: {
        'Content-Type': 'application/json',
        'x-faustwp-secret': apiClientSecret,
    },
    method: 'POST',
    body: JSON.stringify({
        code
    }),
});

启用CORS绕过扩展后请求正常,但自行在WordPress functions.php 和 .htaccess 中配置CORS头无效。

可能原因及解决步骤

1. WordPress REST API的CORS处理优先级冲突

WordPress REST API默认自带CORS处理逻辑,send_headers 钩子的执行时机晚于REST API内置的CORS头设置,导致自定义配置被覆盖。

解决方法:使用REST API专属钩子替代send_headers,直接修改REST响应的CORS规则:

add_action('rest_api_init', function () {
    // 移除默认的REST CORS处理
    remove_filter('rest_pre_serve_request', 'rest_send_cors_headers');
    // 添加自定义CORS规则
    add_filter('rest_pre_serve_request', function ($value) {
        header('Access-Control-Allow-Origin: *');
        header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
        header('Access-Control-Allow-Headers: Content-Type, x-faustwp-secret');
        return $value;
    });
});

注意:不要混用通配符*和指定请求头,直接明确列出允许的字段,避免浏览器解析歧义。

2. CORS预检请求(OPTIONS)未被正确响应

浏览器发送POST请求前会先发送OPTIONS预检请求,验证服务器是否允许自定义头。如果服务器未正确处理OPTIONS请求,浏览器会拦截后续的实际请求。

解决方法:在.htaccess中添加OPTIONS请求处理规则(Apache环境):

<IfModule mod_headers.c>
    # 确保所有响应都携带CORS头
    Header always set Access-Control-Allow-Origin "*"
    Header always set Access-Control-Allow-Methods "GET, POST, OPTIONS"
    Header always set Access-Control-Allow-Headers "Content-Type, x-faustwp-secret"

    # 针对OPTIONS请求直接返回200状态码,避免WordPress返回404
    RewriteEngine On
    RewriteCond %{REQUEST_METHOD} OPTIONS
    RewriteRule ^(.*)$ $1 [R=200,L]
</IfModule>

如果是Nginx环境,需在站点配置中添加:

location /wp-json/ {
    add_header Access-Control-Allow-Origin *;
    add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
    add_header Access-Control-Allow-Headers "Content-Type, x-faustwp-secret";
    
    # 处理OPTIONS预检请求
    if ($request_method = OPTIONS) {
        return 204;
    }
}

3. 验证x-faustwp-secret值及接口路径正确性

  • 确认前端的apiClientSecret与WordPress后台「FaustWP设置」中的Client Secret完全一致,注意大小写、空格及特殊字符
  • 建议使用标准REST API路径https://mywebsite.com/wp-json/faustwp/v1/authorize替代?rest_route=的写法,避免URL解析异常

4. 排查服务器安全限制

  • 检查WordPress安全插件(如Wordfence)是否拦截了自定义请求头,需将x-faustwp-secret添加到插件的「允许请求头」列表中
  • 确认服务器已启用mod_headers模块(Apache),可通过phpinfo()查看模块状态

内容的提问来源于stack exchange,提问作者Xanthous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 07:50:26