前言:因為在使用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配置失效。