前端跨域問題解決Access to XMLHttpRequest at xxx from has been blocked by CORS policy

在前端開發中,跨域資源共享(CORS)是一個常見的問題。它涉及到瀏覽器安全機制,防止網頁從一個域獲取資源時被另一個域阻止。錯誤信息如“Access to XMLHttpRequest at 'xxx' from origin 'has been blocked by CORS policy'”是典型的跨域問題。本文將詳細解釋CORS的工作原理,并提供幾種解決跨域問題的方法。

一、CORS的基本原理

CORS(Cross-Origin Resource Sharing)是一種瀏覽器技術,它允許服務器通過設置HTTP頭來決定哪些來源可以訪問資源。CORS頭包括:

  • Access-Control-Allow-Origin:指定哪些域可以訪問資源。
  • Access-Control-Allow-Methods:指定允許的HTTP方法(如GET, POST)。
  • Access-Control-Allow-Headers:指定允許的HTTP頭。
  • Access-Control-Allow-Credentials:指示是否可以發送Cookie。

二、解決跨域問題的方法

1. 服務器設置CORS頭

在服務器端,通過設置適當的CORS頭來允許跨域訪問。

示例:在Node.js Express服務器中設置CORS頭

const express = require('express');
const app = express();app.use((req, res, next) => {res.header('Access-Control-Allow-Origin', '*'); // 允許所有來源res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE'); // 允許的方法res.header('Access-Control-Allow-Headers', 'Content-Type'); // 允許的頭next();
});app.get('/api/data', (req, res) => {res.json({ message: 'This is CORS-enabled for all origins!' });
});app.listen(3000, () => {console.log('CORS-enabled web server listening on port 3000');
});
?

注意Access-Control-Allow-Origin: *?允許所有來源訪問資源,在生產環境中應慎用,可以改為特定域名。

2. JSONP(JSON with Padding)

JSONP是跨域請求的一種傳統方法,但僅限于GET請求。它通過動態插入script標簽來實現。

示例

<script>function handleResponse(response) {console.log('Data:', response);}
</script>
<script src="https://example.com/api/data?callback=handleResponse"></script>
?

服務器端(Node.js Express):

app.get('/api/data', (req, res) => {const callback = req.query.callback;const data = { message: 'This is a JSONP response' };res.send(`${callback}(${JSON.stringify(data)})`);
});
?
3. 使用代理服務器

通過設置代理服務器,將請求轉發到目標服務器,避免直接跨域。

示例:在Vue CLI中配置代理

// vue.config.js
module.exports = {devServer: {proxy: {'/api': {target: 'https://example.com',changeOrigin: true,pathRewrite: {'^/api': ''}}}}
};
?
4. 在Nginx中配置CORS

通過Nginx反向代理設置CORS頭。

示例

server {listen 80;server_name example.com;location /api/ {proxy_pass http://backend_server;add_header Access-Control-Allow-Origin *;add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';add_header Access-Control-Allow-Headers 'Content-Type, Authorization';add_header Access-Control-Allow-Credentials true;}
}
?
5. 使用瀏覽器插件

在開發過程中,可以使用瀏覽器插件來臨時解決CORS問題,如CORS Unblock。

三、CORS的常見配置錯誤及解決方法

1. Access-Control-Allow-Origin設置不正確

錯誤:服務器未設置?Access-Control-Allow-Origin或設置不正確。

解決:確保服務器正確設置?Access-Control-Allow-Origin頭。

res.header('Access-Control-Allow-Origin', 'https://your-allowed-origin.com');
?
2. 預檢請求(OPTIONS)失敗

錯誤:服務器未處理預檢請求,導致跨域請求失敗。

解決:確保服務器正確處理OPTIONS請求。

app.options('/api/data', (req, res) => {res.header('Access-Control-Allow-Origin', 'https://your-allowed-origin.com');res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');res.header('Access-Control-Allow-Headers', 'Content-Type');res.send();
});
?
3. Access-Control-Allow-Credentials設置不正確

錯誤Access-Control-Allow-Credentials設置為?true,但?Access-Control-Allow-Origin設置為?*

解決:當設置?Access-Control-Allow-Credentials為?true時,Access-Control-Allow-Origin不能為?*,必須為具體的域名。

res.header('Access-Control-Allow-Origin', 'https://your-allowed-origin.com');
res.header('Access-Control-Allow-Credentials', 'true');

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/912762.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/912762.shtml
英文地址,請注明出處:http://en.pswp.cn/news/912762.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[ linux-系統 ] 軟硬鏈接與動靜態庫

軟硬鏈接 介紹 軟鏈接 通過下圖可以看出軟鏈接和原始文件是兩個獨立的文件&#xff0c;因為軟鏈接有著自己的inode編號&#xff1a; 具有獨立的 inode &#xff0c;也有獨立的數據塊&#xff0c;它的數據塊里面保存的是指向的文件的路徑&#xff0c;公用 inode 硬鏈接 通過…

3D 商品展示與 AR 試戴能為珠寶行業帶來一些便利?

對于珠寶行業而言&#xff0c;長久以來&#xff0c;如何讓消費者在做出購買決策之前&#xff0c;便能真切且直觀地領略到珠寶獨一無二的魅力&#xff0c;始終是橫亙在行業發展道路上的一道棘手難題。而 3D 互動營銷的橫空出世&#xff0c;恰似一道曙光&#xff0c;完美且精準地…

電子電氣架構 --- SOVD功能簡單介紹

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 簡單,單純,喜歡獨處,獨來獨往,不易合同頻過著接地氣的生活,除了生存溫飽問題之外,沒有什么過多的欲望,表面看起來很高冷,內心熱情,如果你身…

【Java編程動手學】 Java中的運算符全解析

文章目錄 一、引言二、算術運算符1、基本概念2、具體運算符及示例 三、關系運算符1、基本概念2、具體運算符及示例 四、自增減運算符1、基本概念2、具體運算符及示例 五、邏輯運算符1、基本概念2、具體運算符及示例 六、位運算符1、基本概念2、具體運算符及示例 七、移位運算符…

【前端】1 小時實現 React 簡歷項目

近期更新完畢。僅包括核心代碼 目錄結構 yarn.lock保證開發者每次能下載到同版本依賴&#xff0c;一般不需要特別留意 package.json 是 Node.js 項目、前端項目、npm/yarn的配置文件。 Dockerfile 是用來 定義 Docker 鏡像構建過程的文本文件。它是一份腳本&#xff0c;告訴 …

python中的pydantic是什么?

Pydantic 是 Python 中一個用于數據驗證和設置管理的庫&#xff0c;主要通過 Python 類型注解&#xff08;Type Hints&#xff09;來定義數據結構&#xff0c;并自動驗證輸入數據的合法性。它廣泛應用于 API 開發&#xff08;如 FastAPI&#xff09;、配置管理、數據序列化等場…

騰訊云市場目前飽和度

首先我需要理解市場飽和度的概念。市場飽和度通常指一個產品或服務在潛在市場中的滲透程度&#xff0c;高飽和度意味著市場增長空間有限&#xff0c;低飽和度則表明還有較大發展潛力。 從搜索結果看&#xff0c;騰訊云目前在中國云服務市場排名第三&#xff0c;市場份額約為15%…

EDR、NDR、XDR工作原理和架構及區別

大家讀完覺得有幫助記得關注和點贊&#xff01;&#xff01;&#xff01; EDR、NDR、XDR是網絡安全中關鍵的檢測與響應技術&#xff0c;它們在覆蓋范圍、數據源和響應機制上有顯著差異。以下是它們的工作原理和架構詳解&#xff1a; --- ### &#x1f50d; 一、EDR&#xff0…

vue3 + luckysheet 實現在線編輯Excel

效果圖奉上&#xff1a; 引入的依賴&#xff1a; "dependencies": {"types/jquery": "^3.5.32","types/xlsx": "^0.0.36","jquery": "^3.7.1","xlsx": "^0.18.5",}在index.html中…

Linux下MinIO分布式安裝部署

文章目錄 一、MinIO簡單說明二、MinIO分布式安裝部署1、關閉SELINUX2、開啟防火墻2.1、關閉firewall&#xff1a;2.2、安裝iptables防火墻 3、安裝MinIO4、添加MinIO集群控制腳本4.1添加啟動腳本4.2添加關閉腳本 5、MinIO控制臺使用 一、MinIO簡單說明 1、MinIO是一個輕量的對…

Codeforces Round 980 (Div. 2)

ABC 略 D 這個過程一定是由1向后跳的過程中穿插有幾次向前一步一步走。直到跳到一個位置后再把前面所有沒有走過的位置倒序走一遍。總分就等于最大位置的前綴和-前面所有起跳位置和。前綴和固定我們只需要求到每個位置的最小起跳和即可。對于這個向后跳和向前走的過程我們可以…

Langchain實現rag功能

RAG&#xff08;檢索增強生成&#xff09;的核心是通過外部知識庫增強大模型回答的準確性和針對性&#xff0c;其工作流程與優化策略如下&#xff1a; 一、RAG 核心流程 ?知識庫構建? ?文檔加載與分割?&#xff1a;將非結構化文檔&#xff08;PDF、Markdown等&#xff09;…

算法筆記上機訓練實戰指南刷題

算法筆記上機訓練實戰指南刷題記錄 文章目錄 算法筆記上機訓練實戰指南刷題記錄模擬B1001 害死人不償命的(3n1)猜想B1011 AB 和 CB1016 部分ABB1026 程序運行時間B1046劃拳B1008數組元素循環右移問題B1012 數字分類B1018 錘子剪刀布A1042 Shuffling Machine 每天兩題&#xff0…

MYSQL基礎內容

一、介紹 1.不用數據庫&#xff1a;使用IO流對數據進行管理 2.使用數據庫&#xff1a;使用SQL語句對開發的數據進行管理&#xff0c;能儲存上億條數據 3.MYSQL&#xff1a; 是流行的關系型數據庫管理系統之一&#xff0c;將數據保存在不同的數據表中&#xff0c;通過表與表之…

音視頻會議服務搭建(設計方案)-01

前言 最近在做音視頻會議系統服務搭建的工作任務&#xff0c;因為內容過多&#xff0c;我會逐篇分享相關的設計方案、開發思路、編程語言、使用的組件集合等等。如果你也有大型音視頻會議系統搭建架構的需求&#xff0c;希望這些可以對你有所幫助。 EchoMeet 音視頻會議系統架構…

刷leetcode hot100/準備機試--圖

圖的基礎知識【這部分建議使用acm模式】 圖論理論基礎 | 代碼隨想錄 存儲&#xff1a; 一般有鄰接表【適合稀疏圖】【數組 鏈表 】和鄰接矩陣【適合稠密圖】存儲方式 注意鄰接表 和 鄰接矩陣的寫法都要掌握&#xff01; 鄰接矩陣 n個節點&#xff0c;申請n*n或者&#xf…

無代碼自動化測試工具介紹

無代碼自動化測試工具允許用戶無需編寫代碼即可創建和運行測試,通過拖拽式界面或錄制回放等可視化界面進行操作。 這些工具利用圖形用戶界面和預定義命令來創建測試,使非編程人員也能進行自動化測試。 無代碼自動化測試工具使團隊能夠: 使用直觀的拖拽界面開發和執行自動化…

python學習打卡day58

DAY 58 經典時序預測模型2 知識點回顧&#xff1a; 時序建模的流程時序任務經典單變量數據集ARIMA&#xff08;p&#xff0c;d&#xff0c;q&#xff09;模型實戰SARIMA摘要圖的理解處理不平穩的2種差分 n階差分---處理趨勢季節性差分---處理季節性 建立一個ARIMA模型&#xf…

分布式鎖的實現方式:使用 Redisson 實現分布式鎖( Spring Boot )

Redisson提供了分布式和可擴展的Java數據結構&#xff0c;包括分布式鎖的實現。 1. 添加依賴 在pom.xml中添加Redisson依賴&#xff1a; <dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId>…

Web基礎關鍵_004_CSS(二)

目 錄 一、樣式 1.行內樣式 2.內部樣式 3.外部樣式 二、選擇器優先級 1.非關系選擇器 2.關系選擇器 三、屬性 四、盒子模型 五、元素 1.塊級元素 2.行內元素 3.行內塊級元素 4.元素類型轉換 六、浮動 七、定位 1.靜態定位 2.相對定位 3.絕對定位 4.固定定位 …