woocommerce rest api:无法获得预检请求通过

时间:2019-10-16 06:31:44

标签: wordpress rest woocommerce cors

我有一个woocommerce网站,我希望其REST API对世界开放。

我了解到需要设置CORS标头,因此我用Google搜索并设置了以下钩子:

add_action('rest_api_init', function() {
remove_filter('rest_pre_serve_request', 'rest_send_cors_headers');   
add_filter('rest_pre_serve_request', function( $value ) {
    header( 'Access-Control-Allow-Origin: *' );
    header( 'Access-Control-Allow-Methods: OPTIONS, GET, POST, PUT, PATCH, DELETE' );
    header( 'Access-Control-Allow-Credentials: true' );
    header('Access-Control-Allow-Headers: Authorization,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Origin,Content-Type,X-Auth-Token,Content-Range,Range');
    return $value;
});
}, 15);

我确认服务器使用正确的CORS标头进行响应:

  

Access-Control-Allow-Credentials:true

     

访问控制允许标题:

     

授权,DNT,X-CustomHeader,保持活动状态,用户代理,X-请求使用,If-Modified-Since,高速缓存控制,来源,内容类型,X-Auth-Token,内容范围,范围

     

允许访问控制的方法:选项,GET,POST,PUT,PATCH,DELETE

     

访问控制允许来源:*

     

访问控制公开标头:X-WP-Total,X-WP-TotalPages

然后我去为客户端编码:

xhr = new XMLHttpRequest();
xhr.open('POST', 'https://..../wp-json/wc/v3/products');
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.setRequestHeader('Authorization', 'Basic ' + btoa('mykey:mysecret'));
xhr.send(JSON.stirngify({ ... });

以上代码是在Chrome控制台的https://google.com标签下输入的。我只是无法收到飞行前要求,这是错误:

  

选项https://..../wp-json/wc/v3/products 401(未经授权)

     

从源访问“ https://..../wp-json/wc/v3/products”处的XMLHttpRequest   “ https://www.google.com”已被CORS政策屏蔽:对   飞行前请求未通过访问控制检查:它没有   HTTP正常状态。

即使响应头与上面发布的完全一样。

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

如果使用的是:“ Access-Control-Allow-Credentials” = true,请确保“ Access-Control-Allow-Origin”不是“ *”,必须使用适当的域进行设置!