日韩欧美国产精品免费一二-日韩欧美国产精品亚洲二区-日韩欧美国产精品专区-日韩欧美国产另-日韩欧美国产免费看-日韩欧美国产免费看清风阁

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

5種瀏覽器跨域解決方案 完美解決常見跨域問題

admin
2025年2月20日 16:56 本文熱度 1023

1. 什么是跨域?

跨域(Cross-Origin)是指瀏覽器出于安全考慮,限制不同源(協議、域名、端口)之間的資源交互。

同源策略(Same-Origin Policy) 要求以下三者必須一致:

  • 協議(HTTP/HTTPS)

  • 域名(如 example.com 與 api.example.com 不同源)

  • 端口(如 80 與 8080 不同源)



2. 跨域的表現形式

當以下場景發生在不同源時,瀏覽器會攔截請求:

  • AJAX/Fetch 請求

  • WebSocket 連接

  • 頁面中嵌入第三方資源(如 <iframe>、字體、腳本)



3. 常見跨域解決方案

3.1 CORS(跨域資源共享)

原理:服務端通過響應頭聲明允許的跨域請求來源。

實現步驟

  1. 1.簡單請求(GET/POST/HEAD,Content-Type 為 text/plainmultipart/form-dataapplication/x-www-form-urlencoded):
    服務端返回 Access-Control-Allow-Origin: * 或具體域名。

  2. 2.預檢請求(復雜請求如 PUT/DELETE 或自定義頭):
    瀏覽器先發送 OPTIONS 請求,服務端需響應:

    Access-Control-Allow-Origin: https://your-domain.comAccess-Control-Allow-Methods: GET, POST, PUTAccess-Control-Allow-Headers: Content-Type, Authorization

示例代碼(Node.js Express)

app.use((req, res, next) => {  res.header("Access-Control-Allow-Origin", "https://your-client.com");  res.header("Access-Control-Allow-Headers", "Content-Type, Authorization");  res.header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");  if (req.method === "OPTIONS") {    return res.sendStatus(200); // 快速返回預檢請求響應  }  next();});

3.2 JSONP(JSON with Padding)

原理:利用 <script> 標簽無跨域限制的特性,通過回調函數獲取數據。

缺點:僅支持 GET 請求,存在安全風險(如 XSS)。

示例代碼

// 前端function handleResponse(data) {  console.log("Received:", data);}const script = document.createElement('script');script.src = 'https://api.example.com/data?callback=handleResponse';document.body.appendChild(script);
// 服務端返回handleResponse({ "status": "success", "data": [...] });

3.3 代理服務器

原理:通過同源的后端服務轉發請求,繞過瀏覽器限制。

實現方式

  • Nginx 反向代理

location /api/ {  proxy_pass https://api.example.com/;  proxy_set_header Host $host;}

開發環境代理(如 webpack-dev-server)

  1. // vue.config.js / webpack.config.jsmodule.exports = {  devServer: {    proxy: {      '/api': {        target: 'https://api.example.com',        changeOrigin: true,      }    }  }};

    3.4 WebSocket

    原理:WebSocket 協議不受同源策略限制。
    ?示例代碼

  1. const socket = new WebSocket('wss://api.example.com/socket');socket.onmessage = (event) => {  console.log('Message:', event.data);};

    3.5 其他方案

    • 修改 document.domain
      僅適用于主域相同、子域不同的場景(需同時設置父頁面和子頁面):

    document.domain = "example.com"// 父頁面和子頁面均需設置        

postMessage API

用于窗口間通信(如 <iframe> 與父頁面):

// 發送方window.parent.postMessage('Hello', 'https://parent-domain.com');
// 接收方window.addEventListener('message', (event) => {  if (event.origin !== 'https://child-domain.com') return;  console.log('Received:', event.data);});

4. 調試與注意事項

  • 瀏覽器控制臺報錯:如 CORS policy 錯誤提示。

  • 攜帶憑證(Credentials)
    若請求需要 Cookies 或認證頭,需設置:

// 前端fetch(url, { credentials: 'include' });
// 服務端res.header("Access-Control-Allow-Credentials", "true");res.header("Access-Control-Allow-Origin", "https://your-client.com"); // 不能為通配符 *

  • 安全性:避免濫用 Access-Control-Allow-Origin: *,防止 CSRF 攻擊。

?

5. 總結

  • 推薦方案:優先使用 CORS 或代理服務器。

  • 兼容性場景:JSONP 適用于老舊系統。

  • 實時通信:WebSocket 是理想選擇。

通過理解跨域機制及解決方案,開發者可靈活應對不同場景的跨域需求。


該文章在 2025/2/20 16:59:28 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产福利免费 | 电话耳机| 欧美国产在线看 | 国产福利精品在线观看 | 成人福利在线免费观看 | 男人性毛 | 国产一区二区在线观 | 电影推荐 | 日韩美女永久网址在线观看 | 免费va国产高清大片在线 | 美女视频黄又黄 | 一本久道综合在线 | 国产亚洲人成网线在线播放va | 欧亚日韩| 亚洲精品亚洲人成在线 | 国产香蕉国产精品偷在线观看 | 国产精品熟女视频一区二区 | 精品中文字幕 | 日本亚洲视频在线不卡免费 | 国产亚洲精品高清在线 | 国产v在线在线观看视频免费 | 国产女人抽搐喷浆视频 | 亚洲欧美自偷自拍另类视 | 99热门精品一区二区三区无 | 亚洲精品国自产拍在线观看 | 日韩精品中文字幕视频在 | 国产日韩精品一区二区三区在线 | 少女哔哩| 亚洲精品沙发午睡系列 | 欧美一级鲁丝 | 国产中文字幕在线点播 | 日韩欧美一区二区高清视频 | 欧美精品一区二区在线观看播放 | 日韩一级一区二区不 | 亚洲精品a∨在线国自产拍 露脸对白不带套在线播放 亚洲一级大片 | 免费观看国产一区二区三区 | 日韩在线一区二区三区观看 | 天堂tv亚洲tv日本tv不卡 | 国精产品48x国精产品 | 精品一区二区不卡 | 亚洲欧美日韩综合第一页 |