在Web開發領域, CORS(跨來源資源共享)是開發人員必須理解的基本概念,以確保不同領域之間安全且有效率的資料交換。本指南將帶您了解 CORS 的複雜性,解釋其目的、工作原理,並提供實際範例來鞏固您的理解。
請訂閱我的 [YouTube 頻道](https://www.youtube.com/@DevDivewithDipak?sub\_confirmation=1
)來支援我的頻道並獲取更多 Web 開發教學。
CORS 是 Web 瀏覽器實現的安全功能,用於控制網頁如何從與提供該網頁的網域不同的網域請求資源。這對於防止惡意網站存取其他網站的敏感資料至關重要。
CORS 允許伺服器指定誰可以存取其資源以及如何存取它們。如果沒有 CORS,網站將無法與不同網域上的 API 或資源進行交互,從而嚴重限制現代 Web 應用程式的功能。
當網頁向不同網域發出請求(跨網域請求)時,瀏覽器會傳送帶有Origin
標頭的 HTTP 請求。然後,伺服器使用特定的 CORS 標頭進行回應,以指示是否允許該請求。以下是涉及的主要標頭:
Access-Control-Allow-Origin
:指定允許哪些來源存取資源。
Access-Control-Allow-Methods
:指示資源允許的 HTTP 方法。
Access-Control-Allow-Headers
:列出實際請求期間可以使用的標頭。
簡單請求是滿足特定條件的請求,例如使用不帶自訂標頭的 GET、POST 或 HEAD 方法之一。對於這些請求,伺服器直接使用適當的 CORS 標頭進行回應。
對於更複雜的請求(例如,使用 GET/POST 以外的方法或包含自訂標頭的請求),瀏覽器首先向伺服器發送OPTIONS
請求。這稱為預檢請求,它檢查實際請求是否可以安全地發送。
讓我們透過一個範例來了解如何在 Node.js Express 伺服器中實作 CORS。
首先,建立一個新的 Node.js 專案並安裝必要的依賴項:
mkdir cors-example
cd cors-example
npm init -y
npm install express cors
建立一個名為server.js
的新檔案並新增以下程式碼:
const express = require('express');
const cors = require('cors');
const app = express();
// Enable CORS for all routes
app.use(cors());
app.get('/data', (req, res) => {
res.json({ message: 'Hello, CORS!' });
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
在此範例中,我們使用cors
中間件為所有路由啟用 CORS。這允許任何網域存取/data
端點。
若要測試 CORS 配置,請建立一個包含下列內容的 HTML 檔案 ( index.html
):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>CORS Test</title>
</head>
<body>
<h1>Testing CORS</h1>
<button id="fetchData">Fetch Data</button>
<div id="result"></div>
<script>
document.getElementById('fetchData').addEventListener('click', () => {
fetch('http://localhost:3000/data')
.then(response => response.json())
.then(data => {
document.getElementById('result').textContent = data.message;
})
.catch(error => {
console.error('Error:', error);
});
});
</script>
</body>
</html>
在瀏覽器中開啟index.html
,然後按一下「取得資料」按鈕。您應該會看到訊息“Hello, CORS!”顯示在頁面上。
若想更全面地了解 CORS,包括進階主題和實際範例,請查看我們的後續部落格文章: 進階 CORS:深入探討跨來源資源共享。
了解和配置 CORS 對於現代 Web 開發至關重要。透過設定適當的 CORS 標頭,您可以控制資源的存取方式,從而確保安全性和功能性。本指南提供了對 CORS 的基本了解和幫助您入門的實際範例。
如果您喜歡我的內容並想支持我的工作,請考慮為我買杯咖啡!您的支持幫助我繼續為開發者社群創造有價值的內容。
|部分|標題 |連結 |
|------|------------------------------------------------ -------------- -----------|------------------------ ---------------- --------|
| 1 |編寫簡潔程式碼的 10 個 JavaScript 最佳實務 | 閱讀|
| 2 |適合每位開發人員的 20 個 JavaScript 技巧與技巧🚀 |閱讀|
| 3 |您需要了解的 8 個令人興奮的新 JavaScript 概念 |閱讀|
| 4 |在 JavaScript 應用程式中管理狀態的 7 個重要技巧 | 閱讀|
| 5 | 🔒 基本 Node.js 安全最佳實務 |閱讀|
| 6 |優化角度效能的 10 個最佳實踐 |閱讀|
| 7 |十大 React 效能優化技術 |閱讀|
| 8 |增強您的投資組合的 15 個最佳 JavaScript 專案 |閱讀|
| 9 |掌握 Node.js 的 6 個儲存庫 |閱讀|
| 10 | 10掌握 Next.js 的 6 個最佳儲存庫 |閱讀|
| 11 | 11用於建立互動式 UI 的 5 個最佳 JavaScript 庫 |閱讀|
| 12 | 12每個開發人員都應該了解的 3 個 JavaScript 概念 |閱讀|
| 13 |大規模提高 Node.js 效能的 20 種方法 |閱讀|
| 14 | 14使用壓縮中間件提升 Node.js 應用程式效能 | 閱讀|
| 15 | 15了解 Dijkstra 演算法:逐步指南 |閱讀|
| 16 | 16了解 NPM 和 NVM:Node.js 開發的基本工具 | 閱讀|
Instagram : devdivewithdipak
網址:[Dipak Ahirav] (https://www.dipakahirav.com)
電子郵件:[email protected]
YouTube :[devDive 與 Dipak](https://www.youtube.com/@DevDivewithDipak?sub\_confirmation=1
)
原文出處:https://dev.to/dipakahirav/mastering-cors-the-definitive-guide-with-practical-examples-eml