首頁 > web前端 > js教程 > 如何在 PHP 中正確配置 CORS 標頭以避免跨域請求錯誤?

如何在 PHP 中正確配置 CORS 標頭以避免跨域請求錯誤?

Mary-Kate Olsen
發布: 2024-12-16 06:15:16
原創
250 人瀏覽過

How Can I Properly Configure CORS Headers in PHP to Avoid Cross-Origin Request Errors?

跨來源請求標頭(CORS) 與PHP 標頭

了解CORS

跨源請求共享(CORS) 是一種機制,允許瀏覽器可以安全地發出跨域HTTP 請求,從而實現不同域或子域之間的通訊。此機制有助於防止未經授權的資源訪問,確保資料隱私和安全。

帶有範例標頭的CORS 流程

為了示範CORS 流程,讓我們考慮一個簡化的PHP 腳本:

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: *");
登入後複製

此腳本允許來自任何來源和任何標頭的跨來源請求。但是,在某些情況下,您可能會遇到以下錯誤訊息:

Request header field X-Requested-With is not allowed by Access-Control-Allow-Headers
登入後複製

解決錯誤

要正確處理 CORS 請求,您需要明確指定允許的標頭。正確回應CORS 請求的更全面的函數是:

function cors() {
    if (isset($_SERVER['HTTP_ORIGIN'])) {
        header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
        header('Access-Control-Allow-Credentials: true');
        header('Access-Control-Max-Age: 86400');
    }

    if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
        if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) {
            header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
        }
        if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) {
            header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
        }
        exit(0);
    }

    echo "You have CORS!";
}
登入後複製

安全說明

1.驗證HTTP_ORIGIN:
當您收到HTTP_ORIGIN 標頭時,請務必在允許請求之前將其與已批准來源的白名單進行檢查。

2. X-Requested-With 驗證:
上面的腳本允許任何標頭,包括 X-Requested-With。這也應該得到驗證,尤其是在生產環境中。

3.閱讀CORS 規格:
要全面了解CORS,請參考官方規格:

  • [HTTP 存取控制](https:// developer.mozilla.org/en /HTTP_access_control)
  • [取得標準](https://fetch.spec.whatwg.org/#http-cors-protocol)

TL;DR

  • TL;DR
  • TL;DR
TL;DRTL;DRCORS 支援跨來源HTTP 請求透過修改瀏覽器的安全性策略。 回應CORS請求時,必須設定Access-Control-Allow-Origin header。 使用 Access-Control-Allow-Headers 明確指定允許的標頭。 出於安全原因,請務必驗證 HTTP_ORIGIN 和其他相關標頭。

以上是如何在 PHP 中正確配置 CORS 標頭以避免跨域請求錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板