【发布时间】:2020-08-24 22:04:49
【问题描述】:
我有一个 WordPress 后端,我在其中向 API 添加了我自己的自定义端点:
// retrieve countries
register_rest_route( $namespace, '/countries',
array(
'methods' => 'GET',
'callback' => array( $this, 'get_countries' ),
)
);
// check answer
register_rest_route( $namespace, '/check_answer',
array(
'methods' => 'POST',
'callback' => array( $this, 'check_answer' ),
)
);
我已经这样设置了我的环境:https://example.com 是 React 应用程序所在的位置,而 WordPress 位于 https://example.com/wp 上的子目录中
我的 React 应用程序向上述端点发出 POST 和 GET 请求。我有一个生产环境变量,我在其中设置 API 的基本 URL,即 https://example.com/wp/wp-json/game(“游戏”是我的命名空间),因此我可以使用 Axios 向 https://example.com/wp/wp-json/game/countries 和 https://example.com/wp/wp-json/game/check_answer 发出请求,问题就来了.
我的服务器已配置为使用 www 为 React 应用程序提供服务。所以https://example.com 和https://www.example.com 都服务于同一个应用程序。
但这会为我的自定义端点产生一些有趣的问题: GET 请求始终有效。 但 POST 请求仅在我从 https://example.com 尝试时才有效,而不是从 https://www.example.com 尝试。在后者的情况下,它只是向我显示一个失败的请求。没有反应,什么都没有。
我用谷歌搜索过,它似乎与 CORS 有关,但我无法修复它。这里有什么想法吗?
【问题讨论】:
-
浏览器在 devtools 控制台中记录的确切错误消息是什么?
-
您采取了哪些步骤来启用 CORS 请求发送到的服务器?
-
您可能需要设置其他标题,例如
Access-Control-Allow-Methods等。也许这个 SO 问题会帮助你:stackoverflow.com/questions/8719276/… -
@DannyHobo 你能分享一些关于你本地开发环境的额外信息吗? - 您的反应应用程序是否使用 CRA(创建反应应用程序)? - 您是否在本地 WordPress 环境中使用 Laravel Valet 或类似工具?如果是这样,您使用的是 Nginx 还是 Apache? - 你的 React 应用程序使用 SSR 吗? - 你在写故事书或类似的东西吗?我经常处理这个问题,但我需要一些额外的信息才能让你畅通无阻。
-
@AjeetShah 在下面的答案中看到,我尝试了 Shazyriver 提供的确切代码
标签: php reactjs wordpress cors wordpress-rest-api