什麼是 CORS?

CORS(Cross-Origin Resource Sharing,跨來源資源共享)是一種機制,允許網頁請求訪問另一個域名下的資源。預設情況下,出於安全考慮,瀏覽器會阻止跨來源(cross-origin)的請求。

預檢請求(Preflight Request)

當你嘗試從瀏覽器發送一個跨域的 HTTP 請求(特別是非簡單請求,例如使用 DELETE 方法或自定義 headers),瀏覽器會先發送一個 OPTIONS 請求,也稱為預檢請求。

這個 OPTIONS 請求用於檢查目標伺服器是否允許這種請求。伺服器會回應一些 CORS 相關的 headers,如 Access-Control-Allow-Origin、Access-Control-Allow-Methods 等,以指示瀏覽器是否可以繼續執行實際的請求。

實作:在 PHP (CodeIgniter4) 中處理 OPTIONS 預檢請求

下面是一個在 PHP 使用 CodeIgniter4 框架來處理 DELETE 和 OPTIONS 請求的範例。

public function delete($id)
{
    // 處理 OPTIONS 預檢請求
    if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
        header('Access-Control-Allow-Origin: *');
        header('Access-Control-Allow-Methods: DELETE, OPTIONS');
        header('Access-Control-Allow-Headers: X-Custom-Header, Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With, authorize_token');
        header('Access-Control-Max-Age: 86400');
        exit(0);
    }

    // 其他業務邏輯(例如,刪除操作)
}

說明:

  • Access-Control-Allow-Origin: *:允許所有來源。
  • Access-Control-Allow-Methods: DELETE, OPTIONS:允許 DELETE 和 OPTIONS 方法。
  • Access-Control-Allow-Headers:允許哪些自定義 headers。這裡包括了 Authorization 和 authorize_token。
  • Access-Control-Max-Age: 86400:預檢請求的結果可以被緩存多久(單位:秒)。

    總結

    正確地處理 CORS 和預檢請求是任何需要跨域功能的 Web 應用或 API 的必需步驟。不正確地處理這些請求可能會導致應用程式出現各種問題,包括安全性問題和功能缺陷。

透過瞭解和實施這些機制,開發者可以確保他們的應用程式更為健壯和安全。

最後修改日期: 2023 年 9 月 8 日

作者