2 回答
TA贡献1982条经验 获得超2个赞
每当出现跨域问题时,都会有两条路由受到影响。假设在您的示例中,您有对“http://api.domain.te/requests/verify”的 GET 请求,因此在使用 GET 请求访问服务器之前,它将使用 OPTIONS 请求访问相同的 url。这将验证您的服务器是否允许跨源请求的 API。
因此,在 CI4 路由中,您必须定义相同的 URL 或包含通配符才能启用跨源请求。
这里,以下示例是通配符请求。
$routes->options('(:any)', 'Controller/options');
在这里,该路由与具有 OPTIONS 方法的任何路由匹配,并且有一个名为 Options 的方法来处理它。
该选项方法可以定义如下:
public function options($any)
{
return $this->response->setHeader('Access-Control-Allow-Origin', '*') //for allow any domain, insecure
->setHeader('Access-Control-Allow-Headers', '*') //for allow any headers, insecure
->setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, DELETE') //method allowed
->setStatusCode(200); //status code
}
这个方法本质上是让浏览器知道请求是允许跨源的,状态方法有GET、POST、PUT和DELETE等。
浏览器点击此请求后,它将被定向到您的请求,该请求也应该启用跨源,如下所示:
$this->response->setContentType('application/json')->setJSON($response)->send()->setHeader('Access-Control-Allow-Origin', '*');
参考:https://carminemilieni.it/2019/09/19/resolve-cors-and-corb-in-codeigniter-4/
TA贡献1798条经验 获得超3个赞
正如您已经所做的那样,必须从接收服务器端访问 CORS,因此我将.htaccess中的标头放入Apache 站点中(如果您使用不同的服务器,请检查如何执行此操作):
Header set Access-Control-Allow-Origin "*"
(在你的情况下,如果可以是多个未知域,它应该是 *)
Header set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept"
(或者如果你也想要方法)
该标头的信息和选项: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin
您可以使用curl检查您发送的标头,它们是否出现? curl -I http://api.domain.te/requests/verify
- 2 回答
- 0 关注
- 102 浏览
添加回答
举报