API的CORS问题

时间:2019-08-30 12:05:03

标签: cors axios

im运行2个docker容器以进行一些本地测试。一个是websites.click处的API,另一个是webplanner.click:8081

我正在尝试从websites.click/api/cache/clear-all的端点请求一些数据,但是我收到以下错误:

  

在以下位置访问XMLHttpRequest   原产地的“ http://websites.click/api/cache/clear-all”   “ http://webplanner.click:8081”已被CORS政策禁止:   对预检请求的响应未通过访问控制检查:   预检请求不允许重定向。

我正在使用Axios来请求数据,如下所示:

window.axios.get('//websites.click/api/cache/clear-all', {

}).then(response => {
    console.log(response);
})

现在我假设问题出在我的htaccess内,因为该错误提到了预检重定向。这是websites.click/api/

中的 htaccess
RewriteEngine On
RewriteBase /api

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?request=$1 [QSA,NC,L]

Options All +Indexes
allow from all

我还向我的/api/index.php添加了以下内容,其中包含路线。

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token');

编辑1:

通过删除ajax请求中的标头进行了建议的更改,仍然出现相同的错误:

Access to XMLHttpRequest at 'http://websites.click/api/cache/clear-all/' from origin 'http://webplanner.click:8081' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: Redirect is not allowed for a preflight request.

这是 XHR 标签中的请求:

Request URL: http://websites.click/api/cache/clear-all/
Accept: application/json, text/plain, */*
Referer: http://webplanner.click:8081/admin/cache
X-Requested-With: XMLHttpRequest
X-Socket-Id: 126436.7368245

1 个答案:

答案 0 :(得分:1)

仔细阅读错误消息:

  

预检请求不允许重定向。

因此,您服务器上的某些内容导致该服务器通过重定向来响应OPTIONS请求。

您需要找出并停止操作。

很可能是从$updated_inv = \Stripe\Invoice::retrieve($invoice_id); //NOT WORKING $intent = $updated_inv->payment_intent; //websites.click/api/cache/clear-all的常见Apache HTTPD重定向,万一您需要首先将JavaScript中的URL更改为正确的URL。


还有什么……

//websites.click/api/cache/clear-all/响应标头。客户端JavaScript能够设置标头为其自身提供默认情况下没有的权限,这将是非常愚蠢的。摆脱它。

'Access-Control-Allow-Origin': '*',-您正在发出 GET 请求。请求主体中没有内容来描述其类型。摆脱它!

…并设置非标准标头并将Content-Type设置为不在不包含JSON的简短列表中的内容,两者都是首先触发预检请求的事情……因此,如果您没有这样做,不用胡说八道,您就不会做预检,也不会遇到这个问题。