當前位置: 首頁> 最新文章列表> 設置跨域頭(CORS)響應:Access-Control-Allow-Origin 的用法

設置跨域頭(CORS)響應:Access-Control-Allow-Origin 的用法

M66 2025-05-28

在Web開發中,跨域問題是一個非常常見的問題。特別是在前後端分離的應用中,前端可能需要訪問不同域名下的資源,而瀏覽器出於安全的考慮,默認會阻止跨域請求。這時候,服務器端就需要通過設置HTTP頭來允許跨域請求。在PHP中,我們可以使用header()函數來設置跨域相關的頭部信息。

1. 跨域問題及解決方案

跨域資源共享(CORS)是一種機制,它通過允許瀏覽器向不同域發起請求,來解決跨域問題。 CORS主要依賴於HTTP頭部,尤其是Access-Control-Allow-Origin 。當瀏覽器向一個不同域的服務器發起請求時,服務器需要在響應頭中包含Access-Control-Allow-Origin來明確允許跨域請求。

2. Access-Control-Allow-Origin詳解

Access-Control-Allow-Origin是CORS標準中的一個關鍵頭部,決定了哪些域名可以訪問資源。它的值可以是以下幾種情況:

  • * :表示所有域名都可以訪問該資源。

  • http://m66.net :只允許該指定域名訪問資源。

  • null :表示不允許跨域請求。

例如,當我們想要允許http://m66.net這個域名進行跨域請求時,我們需要在PHP腳本中設置相應的頭部。

3. 使用PHP設置Access-Control-Allow-Origin

在PHP中,設置HTTP頭部信息是通過header()函數來實現的。要允許跨域請求,最基本的步驟是使用header()設置Access-Control-Allow-Origin

示例代碼:

 <?php
// 允許來自http://m66.net的跨域請求
header("Access-Control-Allow-Origin: http://m66.net");

// 如果需要支持其他HTTP方法(如POST、PUT、DELETE等),可以這樣設置:
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE");

// 如果需要允許攜帶cookie,則需要設置以下頭部
header("Access-Control-Allow-Credentials: true");

// 設置允許的請求頭
header("Access-Control-Allow-Headers: Content-Type, Authorization");

// 在實際應用中,可以判斷請求的來源域名,來動態設置跨域頭
$allowedOrigin = "http://m66.net";
if ($_SERVER['HTTP_ORIGIN'] === $allowedOrigin) {
    header("Access-Control-Allow-Origin: $allowedOrigin");
}
?>

解釋:

  • Access-Control-Allow-Origin :允許指定域名進行跨域請求。如果你希望允許多個域名,可以動態判斷請求來源,設置不同的域名。

  • Access-Control-Allow-Methods :允許的HTTP方法(如GET、POST等)。

  • Access-Control-Allow-Credentials :如果需要發送Cookie,需要將該頭設置為true

  • Access-Control-Allow-Headers :允許的自定義請求頭(例如Content-TypeAuthorization )。

4. 預檢請求(OPTIONS)

當瀏覽器發起某些複雜的跨域請求(如帶有自定義頭部或使用PUT、DELETE方法等)時,瀏覽器會先發送一個OPTIONS請求,稱為預檢請求(Preflight Request)。這個請求是為了檢查服務器是否允許跨域請求。在預檢請求的響應中,服務器也需要返回相應的CORS頭部。

例如:

 <?php
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    // 處理預檢請求
    header("Access-Control-Allow-Origin: http://m66.net");
    header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE");
    header("Access-Control-Allow-Headers: Content-Type, Authorization");
    header("Access-Control-Allow-Credentials: true");
    exit();
}
?>

解釋:

  • OPTIONS請求不需要返回實際數據,但需要正確設置CORS頭部,以告訴瀏覽器服務器是否允許跨域請求。

5. 總結

通過使用PHP的header()函數,我們可以輕鬆設置跨域相關的HTTP頭部,特別是Access-Control-Allow-Origin ,來允許指定域名的跨域請求。根據實際需求,我們可以靈活配置CORS策略,確保安全性和功能的平衡。

跨域資源共享是Web應用中不可忽視的問題,掌握如何在PHP中配置CORS頭部,能夠幫助你解決跨域問題,提高應用的可訪問性和擴展性。