事件浓咖啡CORS错了

时间:2018-01-19 22:22:22

标签: wordpress cors

我被聘请写一个wordpress插件,其中包含对网站的eventespresso api的ajax请求。

我在本地工作正常(从我的本地服务器调用实时网站的api),但是当我在实际网站上激活插件时,它会抛出:

  

无法加载http://example.com/wp-json/ee/v4.8.36/events:The   “Access-Control-Allow-Origin”标头的值为“http://opt.local”   这不等于提供的原产地。起源   因此,“http://www.example.com”不允许访问。

我的本​​地域名为“http://opt.local”,实际网站为http://example.com

这个错误告诉我,它只想允许从我的本地设置访问,而不是从现场站点访问,这甚至不是跨域的!也许我让它在开发中缓存了错误的东西?

因此,除了我需要的具体路线之外,还有一些测试显示,除​​了特定路线外,其他所有设置都是正确的。

> curl -I "http://example.com/wp-json"
Access-Control-Allow-Origin: http://example.com

> curl -I "http://example.com/wp-json/ee/v4.8.36"
Access-Control-Allow-Origin: http://example.com

> curl -I "http://example.com/wp-json/ee/v4.8.36/events"
Access-Control-Allow-Origin: http://opt.local

我能够通过使用ee / v4.8.35(较低的api补丁版本)使其工作,但希望有更好的解决方案。

1 个答案:

答案 0 :(得分:0)

我帮助开发了EE4 REST API。

雅听起来像网络服务器或代理或其他什么东西缓存了Access-Control-Allow-Origin标题。

EE4 REST API中没有控制该标头的代码,这些代码实际上由WP API(构建EE4 REST API)处理。

相关代码位于wp-includes/rest-api.php函数的rest_send_cors_headers()中。这会调用get_http_origin(),其值可以使用过滤器http_origin进行过滤。

所以你可能想尝试添加像

这样的东西
function my_plugin_force_correct_http_origin($http_origin) {
    return 'http://example.com';
}
add_filter('http_origin', 'my_plugin_force_correct_http_origin');

将确保PHP代码发送正确的Access-Control-Allow-Origin标头。 如果这还没有解决问题,我会验证rest_send_cors_headers()是否已被调用(您可以暂时在该函数中放置一行echo 'called rest_send_cors_headers!';die;来检查)。

如果它被调用,而我建议的过滤器没有帮助,您可以尝试使用' wordpress-rest-api'标记您的问题。另外,我很想知道http://example.com/wp-json/ee/v4.8.36/events?limit=50是否有同样的问题。