Php codeigniter 4中的CORS问题:对飞行前请求的响应未通过访问控制检查

Php codeigniter 4中的CORS问题:对飞行前请求的响应未通过访问控制检查,php,reactjs,axios,codeigniter-4,Php,Reactjs,Axios,Codeigniter 4,我正在为react应用程序制作一个带有Codeigniter 4的api。在postman中一切正常,但当我使用axios发出请求并尝试获取时,会出现CORS错误 CORS策略已阻止从源站访问位于的XMLHttpRequest:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许源站”标头 我尝试将标题添加到基本控制器: header('Access-Control-Allow-Origin: *'); header("Access-Control-Allow-Methods:

我正在为react应用程序制作一个带有Codeigniter 4的api。在postman中一切正常,但当我使用axios发出请求并尝试获取时,会出现CORS错误

CORS策略已阻止从源站访问位于的XMLHttpRequest:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许源站”标头

我尝试将标题添加到基本控制器:

header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Methods: POST,GET, OPTIONS");
header("Access-Control-Allow-Headers: *");
现在,它可以很好地处理没有JSON主体的请求,但当我发送JSON主体时,也会发生同样的错误

axios.post("http://localhost:8080/testpost", { data: "test" })
    .then((response) => {
        console.log(response);
    })
    .catch((err) => {
        console.log("error!!!");
    });

感谢您的帮助

请尝试在www/public目录的根目录中设置Apache响应头并将方法重定向到.htaccess,如下所示:

#Redirect for CORS Preflight request
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]
#Set headers to access CORS Requests / allowing localhost only
Header always add Access-Control-Allow-Origin "*"
Header always add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header always add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"

注意:小心添加标题始终将访问控制允许源代码*添加到您的.htaccess,*为攻击者打开大门,将*替换为您的域或域

这个解决方案有什么问题吗?谢谢你的回复,不幸的是它不起作用。这与在PHP中设置标题的操作是一样的。如果完成了,那么您可以将其标记为完成吗?谢谢,现在它可以工作了。我希望这是一个PHP的方式。但现在我认为这是最好的方法。@ron_g,您必须将这些行添加到根公共路径中的.htaccess文件中。注意不要重复前3行。
// Home Controller
public function testPost()
{
    return $this->response->setJSON('test response');
}
#Redirect for CORS Preflight request
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]
#Set headers to access CORS Requests / allowing localhost only
Header always add Access-Control-Allow-Origin "*"
Header always add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header always add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"