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/
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');
通过删除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
答案 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的简短列表中的内容,两者都是首先触发预检请求的事情……因此,如果您没有这样做,不用胡说八道,您就不会做预检,也不会遇到这个问题。