鍍金池/ 問答/網(wǎng)絡安全  HTML/ 關于axios在vue下進行跨域請求無法帶上cookie的問題

關于axios在vue下進行跨域請求無法帶上cookie的問題

這個問題我知道網(wǎng)上有很多人提問,我也試了很多方法,但是還是無法找出問題所在。。。

1、在vue中,通過axios進行跨域請求,服務端返回的cookie無法設置,導致每次后臺都獲取新的session,無法保持登錄狀態(tài)。

服務器的地址我本機的地址

請求的服務為: http://172.11.4.39:8080/layout/list

vue 項目使用webpack http://localhost:9527

axios 版本為 0.17.1 下文單獨測試的html中axios也是一樣的版本

2、
java后端的跨域設置

 res.setContentType("text/html;charset=UTF-8");  
 res.setHeader("Access-Control-Allow-Origin", "http://localhost:9527");  
 res.setHeader("Access-Control-Allow-Credentials", "true");  
 res.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");  
 res.setHeader("Access-Control-Allow-Headers", "Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With,userId,token");  

axios請求代碼:

 axios({
        url: 'http://172.11.4.39:8080/layout/list',
        method: 'post',
        transformRequest: [function (data) {
          // Do whatever you want to transform the data
          let ret = ''
          for (let it in data) {
            if (data[it] == null) continue
            ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
          }
          return ret
        }],
        withCredentials: true,
        data: {
          page: 1,
          limit: 20
        }
      }).then(function (response) {
        console.log(response);
      })
      .catch(function (error) {
        console.log(error);
      })

3、返回的請求(截圖這邊的allow-origin不太對,是因為我截到測試的圖去了,其實是跟上面寫的9527是一樣的)
圖片描述

每次請求都不回帶上cookie

4、我懷疑是不是后臺跨域沒設置對,于是我自己寫了個html,分別用jquery和axios跨域訪問請求,在沒加上

xhrFields: {
    withCredentials: true
},

withCredentials: true

時,確實會不回設置cookie,但是加上后問題確實解決了。可是在vue項目中就不行了。

雖然開發(fā)時沒問題,可以用webpack做代理,這時是可以設置cookie的,但是我打包后部署測試發(fā)現(xiàn)還是不行,還是不會設置返回的cookie。

謝謝各位幫助。

2018 03 29 更新

問題解決了,但是提的這個問題還是沒解決。后面是通過nginx轉發(fā)請求解決的,這樣服務器返回的set-cookie是有生效的。

說回這個問題,因為這個項目是在別人封裝elementui后的項目基礎上做的,學藝不精的我有些配置也看的不是很明白,但是我把有關axios的設置都看了一遍,也刪掉一些之前的axios設置,還是沒用。。。

最后時間趕就改成了用nginx來轉發(fā)請求。

最后謝謝各位的幫助。

回答
編輯回答
忠妾

1.你cookie是在哪里設置的,設置cookie的域名和api接口的域名是不是同一個,不是同一個是帶不上的

2018年4月2日 13:53
編輯回答
莓森

為啥響應頭Access-Control-Allow-Origin是localhost:3000,不應該是localhost:9527嗎?

2018年7月30日 12:31
編輯回答
心悲涼

如果你的后臺和前端頁面不是同一個域名是不能夠帶上cookie的。

2018年8月12日 02:48
編輯回答
兮顏

把 IP 換成域名 試試

2017年2月6日 20:49
編輯回答
殘淚

最后我用nginx來轉發(fā)請求來解決這個問題,希望能給其他人一點小小的思路,網(wǎng)上搜索資料有很多。
再次謝謝各位的幫助

2018年1月13日 01:10