axios設置請求頭失效的問題


前言:因為在使用vue-element-admin框架時遇到了設置請求頭失效的問題,在后來發現是代理跨域問題,所以又簡單理解了一下跨域。

出現的問題是我在axios攔截器上設置了請求頭token,但是在發送請求時並未攜帶token,

 

 經過原因排查, 發現我在請求路徑時直接設置為服務器環境域名,改為localhost,並通過proxy代理后成功設置了請求頭token。

首先,了解什么是跨域?

當一個請求url的協議、域名、端口三者之間任意一個與當前頁面url不同即為跨域。

我們常見的跨域場景:

URL                                      說明                    是否允許通信
http://www.demo.com/a.js
http://www.demo.com/b.js         同一域名,不同文件或路徑           允許
http://www.demo.com/lab/c.js

http://www.demo.com:8000/a.js
http://www.demo.com/b.js         同一域名,不同端口                不允許
 
http://www.demo.com/a.js
https://www.demo.com/b.js        同一域名,不同協議                不允許
 
http://www.demo.com/a.js
http://127.0.0.1/b.js           域名和域名對應相同ip              不允許
 
http://www.demo.com/a.js
http://x.demo.com/b.js           主域相同,子域不同                不允許
http://demo.com/c.js
 
http://www.demo1.com/a.js
http://www.demo2.com/b.js        不同域名                         不允許

為什么會產生跨域?

出於瀏覽器的同源策略限制。同源策略/SOP(Same origin policy)是一種約定,由Netscape公司1995年引入瀏覽器,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,瀏覽器很容易受到XSS、CSFR等攻擊。所謂同源是指"協議+域名+端口"三者相同,即便兩個不同的域名指向同一個ip地址,也非同源。

前端解決跨域的幾種方法

1、 通過jsonp跨域
2、 document.domain + iframe跨域
3、 location.hash + iframe
4、 window.name + iframe跨域
5、 postMessage跨域
6、 跨域資源共享(CORS)
7、 nginx代理跨域
8、 nodejs中間件代理跨域
9、 WebSocket協議跨域

回到上面的問題, 之所以出現未攜帶請求頭token的問題就是我在本地直接請求了https協議產生了跨域,導致axios配置失效。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM