2

我正在使用 Codeigniter 4 为反应应用程序制作 api。在邮递员中一切正常,但是当我使用 axios 发出请求(也尝试过 fetch)时,它会出现 CORS 错误

从源“ http: //localhost:8080/testpost ”访问 XMLHttpRequest已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:没有“访问控制” -Allow-Origin' 标头出现在请求的资源上。

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

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!!!");
    });
// Routes.php
$routes->post('/testpost', 'Home::testPost');
// Home Controller
public function testPost()
{
    return $this->response->setJSON('test response');
}

谢谢你的帮助

4

2 回答 2

5

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

#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"

注意:小心添加Header always add Access-Control-Allow-Origin "*"到您的.htaccess"*"为攻击者打开的门,替换*为您的域或 subdumain!

于 2020-05-21T06:43:48.050 回答
0

如果问题是因为www.yourdomain.com导致字体被阻止,则将这些行放在您的 .htaccess 文件中

# Rewrite "www.example.com -> example.com"
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]

CodeIgniter 的默认文件夹已经包含完整的 .htaccess 文件。

于 2022-01-02T21:45:08.777 回答