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 關注
- 189 瀏覽
添加回答
舉報