前端跨域解決方案——CORS

来源:https://www.cnblogs.com/ronaldo9ph/archive/2023/04/27/17358044.html
-Advertisement-
Play Games

CORS(跨來源資源共用)是一種用於解決跨域問題的方案。 CORS(跨來源資源共用)是一種安全機制,用於在瀏覽器和伺服器之間傳遞數據時,限制來自不同功能變數名稱的請求。在前端開發中,當通過 XMLHttpRequest(XHR)或 Fetch API 發送跨域請求時,如果伺服器沒有正確配置 CORS,瀏覽器 ...


CORS(跨來源資源共用)是一種用於解決跨域問題的方案。

CORS(跨來源資源共用)是一種安全機制,用於在瀏覽器和伺服器之間傳遞數據時,限制來自不同功能變數名稱的請求。在前端開發中,當通過 XMLHttpRequest(XHR)或 Fetch API 發送跨域請求時,如果伺服器沒有正確配置 CORS,瀏覽器會阻止該請求,從而導致請求失敗。說白了,它是一種解決跨域問題的方案。

CORS 允許伺服器指定哪些源可以訪問其資源。在跨域請求中,瀏覽器會發送一個預檢請求( OPTIONS )到伺服器,來確定是否允許跨域訪問。預檢請求包含了一些額外的頭信息,比如請求的方法、請求的頭信息等,伺服器需要根據這些信息來判斷是否允許跨域訪問。伺服器返回的響應頭中,需要設置 Access-Control-Allow-OriginAccess-Control-Allow-Methods 等欄位來指定允許訪問的源和方法。



以下是一個使用 CORS 解決跨域問題的例子:

客戶端代碼:

fetch('http://CORS.com/api/data', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
  },
  mode: 'cors',
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error(error))

 

服務端代碼:

const express = require('express');
const app = express();

app.use((req, res, next) => {
  res.setHeader('Access-Control-Allow-Origin', ' ');
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
  res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
  next();
});

app.get('/api/data', (req, res) => {
  const data = { message: 'Hello, World!' };
  res.json(data);
});

app.listen(3000, () => {
  console.log('Server listening on port 3000');
});

在上面的例子中,客戶端使用 fetch 發送一個 GET 請求到 http://CORS.com/api/data ,通過設置 modecors ,告訴瀏覽器需要使用 CORS 方案來解決跨域問題。服務端使用 express 框架,設置 Access-Control-Allow-Origin 等響應頭,指定允許訪問的源和方法。當瀏覽器發送預檢請求時,服務端會返迴響應頭,告訴瀏覽器允許跨域訪問。



它的優點和不足如下:

優點:

1. 安全性高:CORS 是一種安全的跨域訪問解決方案,通過限制允許跨域訪問的源和方法,可以有效地防止惡意攻擊。
1. 靈活性強:CORS 支持不同類型的請求,包括 GET、POST、PUT、DELETE 等,同時也支持不同類型的數據傳輸格式,比如 JSON、XML 等。
1. 使用方便:CORS 只需要在伺服器端設置響應頭,就可以實現跨域訪問,使用方便。

不足:

1. 相容性問題:CORS 在某些舊版的瀏覽器中不支持,需要進行特殊處理。
1. 跨域請求的額外消耗:在使用 CORS 解決跨域請求時,需要發送預檢請求,這會增加請求的時間和帶寬消耗。
1. CSRF 攻擊:雖然 CORS 是一種安全的跨域訪問解決方案,但仍然可能存在 CSRF(Cross-Site Request Forgery)攻擊,需要在使用時加以註意。可以使用 Cookie、Token 或者請求頭中的特定信息來驗證請求是否合法。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、四層結構 viewer --> datasources(DataSourceCollection類型) --> datasource --> entities(EntityCollection類型) --> entity 需要學習的方向是:只需要註意每個層與層之間的關係和entity實例如何創建 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 今日,群友提問,如何實現這麼一個 Loading 效果: 這個確實有點意思,但是這是 CSS 能夠完成的? 沒錯,這個效果中的核心氣泡效果,其實藉助 CSS 中的濾鏡,能夠比較輕鬆的實現,就是所需的元素可能多點。參考我們之前的: 使用純 ...
  • 昨天才把html節點中的圖片轉成base格式的,今天就發現一個用戶體驗的問題;那麼是啥呢?就是我從左側的樹形菜單中拖拽節點的時候(滑鼠按下也是同樣問題),發現節點的圖片區域那裡會出現一個邊框,持續時間不是很長,就幾毫秒的時間,但是當你連續拖拽幾個不同節點的時候就會發現這個邊框竟然又消失不見了,如果此 ...
  • 1.<div style="z-index: 1000; position: absolute; filter: Alpha(opacity = 90); width: 100px;padding: 10px; border: 1px solid #333" id="img" align="cent ...
  • 1.創建vue項目 vue create demo demo是項目名稱 2.安裝axios 進入demo裡面打開終端(黑視窗),執行 npm install axios 3.進行config.js配置 devServer: { host: "0.0.0.0", // 是否可以被覆蓋 port: 80 ...
  • 當我們在編寫 TypeScript 代碼時,經常會遇到需要通用(Generic)的情況,這時候,泛型就是我們的好幫手了。在本篇文章中,我們將深入介紹 TypeScript 泛型的概念以及如何使用。 什麼是泛型? 在編程語言中,泛型指的是參數化類型的概念。也就是說,我們可以定義一個函數、介面或類等,能 ...
  • 大家好,我是DOM哥。我用 ChatGPT 開發了一個 Vue 的資源導航網站。不管你是資深 Vue 用戶,還是剛入門想學習 Vue 的小白,這個網站都能幫助到你。網站地址:https://dombro.site/vue#/vue ...
  • 在業務中,有這麼一種場景,表格下的某一列 ID 值,文本超長了,正常而言會是這樣: 通常,這種情況都需要超長省略溢出打點,那麼,就會變成這樣: 但是,這種展示有個缺點,3 個 ID 看上去就完全一致了,因此,PM 希望能夠實現頭部省略打點,尾部完全展示,那麼,最終希望的效果就會是這樣的: OK,很有 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...