在項目開發中,咱們很常見的一個問題是,本地是localhost
開發的,接口通常是給IP
地址,例如http://192.168.13.14/api
, 這樣直接在項目中調用接口 瀏覽器會報跨域錯誤, 由於localhost
和http://192.168.13.14
並非同源的。webpack
通常咱們的解決方法是在webpack
中設置代理,配置devServer
:nginx
module.exports = { devServer: { proxy: { '/api': { target: 'http://192.168.13.14/api', changeOrigin : true } } } }
設置之後,在接口訪問 假設爲http://localhost:8080/api
時,會轉發到http://192.168.13.14/api
去.web
因此,若是不是經過devServer
的方式,該怎麼作呢?api
接手的項目就沒有配置webpack devServer
,仔細看是設置了Access-Control-Allow-Origin: http://localhost:8054
來解決接口跨域的,可是,這個項目的鑑權方式是cookie
, 這裏地址http://localhost:8054
和接口地址==不一樣源致使cookie
設置失敗==跨域
那麼如今的想法要讓瀏覽器地址與接口地址同源,那麼cookie天然可以設置成功了!瀏覽器
能夠經過配置nginx
來實現。cookie
配置:spa
server { listen 8055 { // 步驟1 location / { proxy_pass: http://localhost:8054/; } // 步驟2 location /api { proxy_pass: http://192.169.13.14; } } }
我訪問的地址原本是http://localhost:8054
, 這裏我監聽8055端口。代理
http://localhost:8055
時,會映射到http://localhost:8054
http://localhost:8055/api/xxxx
時,會映射到http://192.169.13.14/api/xxxx
還有一步,在項目中,要動態配置接口地址:code
const apiAddress = window.location.protocol + '//' + window.location.host + '/api';
這樣,瀏覽器地址與接口地址就都是localhost:8055
開頭的,不存在跨域的問題,cookie
就能成功設置