在 CodeIgniter 4 中将 headers 作为 API 放在哪里?

Where to put headers in CodeIgniter 4 as API?

我正在向我使用 CodeIgniter 4 构建的 API 发送跨源请求。 请求来自 axios.post() 使用 React.

由于axios.post使用content-typeapplication/json,请求并不简单,它发送了预检/选项请求。

现在我得到了

No 'Access-Control-Allow-Origin' header is present on the requested resource.

我在 app/Controllers/Basecontroller.php 中添加了以下内容:

<?php

namespace App\Controllers;

header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
$method = $_SERVER['REQUEST_METHOD'];
if ($method == "OPTIONS") {
    die();
}

// ...

但这并没有解决我的问题。

我现在想知道放置 headers 的最佳位置是什么?

此外,为什么我问,我有不同的控制器用于不同的目的,其中一个应该允许放置和删除而另一个不应该。

我通常创建一个负责处理 CORS 问题的过滤器,在我的例子中,我全局使用过滤器,但你只能在你喜欢的端点上使用它,它通常看起来像这样:

 *
 * @param RequestInterface $request
 * @param array|null       $arguments
 *
 * @return mixed
 */
 public function before(RequestInterface $request, $arguments = null)
{
    $method = $_SERVER['REQUEST_METHOD'];
    header('Access-Control-Allow-Origin: --YOUR IP OR DOMAIN HERE--');
    if ($method == "OPTIONS") {
        header("HTTP/1.1 200 OK");
        header("Access-Control-Allow-Origin: --YOUR IP OR DOMAIN HERE--");
        header('Access-Control-Allow-Headers: authorization, content-type, timeout');
        --YOU CAN ADD OR REMOVE HEADERS BASED ON YOUR NEEDS--
        die();
    }
}

/**
 * Allows After filters to inspect and modify the response
 * object as needed. This method does not allow any way
 * to stop execution of other after filters, short of
 * throwing an Exception or Error.
 *
 * @param RequestInterface  $request
 * @param ResponseInterface $response
 * @param array|null        $arguments
 *
 * @return mixed
 */
public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
{
    //
}
  • 更多关于CI4过滤器的信息请参考:CI4 过滤器
  • 有关 CORS 错误的更多信息,请参阅:CORS 错误