在 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)
{
//
}
我正在向我使用 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)
{
//
}