2 回答

TA貢獻(xiàn)1982條經(jīng)驗(yàn) 獲得超2個(gè)贊
每當(dāng)出現(xiàn)跨域問題時(shí),都會有兩條路由受到影響。假設(shè)在您的示例中,您有對“http://api.domain.te/requests/verify”的 GET 請求,因此在使用 GET 請求訪問服務(wù)器之前,它將使用 OPTIONS 請求訪問相同的 url。這將驗(yàn)證您的服務(wù)器是否允許跨源請求的 API。
因此,在 CI4 路由中,您必須定義相同的 URL 或包含通配符才能啟用跨源請求。
這里,以下示例是通配符請求。
$routes->options('(:any)', 'Controller/options');
在這里,該路由與具有 OPTIONS 方法的任何路由匹配,并且有一個(gè)名為 Options 的方法來處理它。
該選項(xiàng)方法可以定義如下:
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
}
這個(gè)方法本質(zhì)上是讓瀏覽器知道請求是允許跨源的,狀態(tài)方法有GET、POST、PUT和DELETE等。
瀏覽器點(diǎn)擊此請求后,它將被定向到您的請求,該請求也應(yīng)該啟用跨源,如下所示:
$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貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超3個(gè)贊
正如您已經(jīng)所做的那樣,必須從接收服務(wù)器端訪問 CORS,因此我將.htaccess中的標(biāo)頭放入Apache 站點(diǎn)中(如果您使用不同的服務(wù)器,請檢查如何執(zhí)行此操作):
Header set Access-Control-Allow-Origin "*"
(在你的情況下,如果可以是多個(gè)未知域,它應(yīng)該是 *)
Header set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept"
(或者如果你也想要方法)
該標(biāo)頭的信息和選項(xiàng): https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin
您可以使用curl檢查您發(fā)送的標(biāo)頭,它們是否出現(xiàn)? curl -I http://api.domain.te/requests/verify
- 2 回答
- 0 關(guān)注
- 205 瀏覽
添加回答
舉報(bào)