先後端分離以後,開發階段接口聯調就會出現ajax跨域問題。
固然,跨域問題的解決方案仍是挺多的,這裏梳理下我接觸到的幾種方案。前端
Chrome
的同源策略目測這是最簡單粗暴的方案node
能夠經過使用Chrome
命令行啓動參數來改變Chrome
瀏覽器的設置。
這裏使用的是disable-web-security
參數,這個參數能夠下降Chrome
瀏覽器的安全性,禁用同源策略。要支持跨域,還須要加上user-data-dir
。webpack
下面以Windows
爲例。
1.先關閉全部的Chrome
窗口。
2.新建一個Chrome
快捷方式,右擊->屬性->快捷方式。
3.在目標(T)
中設置參數:nginx
--args --disable-web-security --user-data-dir
4.點擊應用/肯定,以這個快捷方式打開Chrome
瀏覽器,效果以下:
web
webpack-dev-server
代理devServer: { ... proxy: { '/api': { target: 'http://127.0.0.1:8080', pathRewrite: {'^/api': '/api/v1'} } } }
將 '/api' 經過本地開發服務器webpack-dev-server
轉發到 'http://127.0.0.1:8080',即轉發到後端服務。pathRewrite
用於路徑轉換,具體取決於你請求的uri
與後端服務實際uri
的差別,好比你本地起的80
端口,你的uri
爲 'http://localhost/api',將爲轉換成 'http://127.0.0.1:8080/api/v1'。
詳細配置請移步 webpack devServer。ajax
nginx
反向代理http { ... server { ... location /api/ { proxy_pass http://127.0.0.1:8080 } } }
CORS
接口
CORS
須要瀏覽器和服務器同時支持。目前全部現代瀏覽器都支持該功能,IE
瀏覽器不能低於IE10
。
對於前端開發者來講,CORS
通訊與同源的AJAX
通訊沒有差異,代碼徹底同樣。express
後端實現CORS
接口只需合理設置Response Header
,以node
爲例:後端
const express = require('express'); let app = express(); app.all('*', (req, res, next) => { res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'); res.setHeader('Access-Control-Allow-Methods', 'PUT,POST,GET,DELETE,OPTIONS'); next(); }); ...