VUE跨域詳解以及常用解決跨域的方法
跨域
當我們遇到請求後臺接口遇到 Access-Control-Allow-Origin 時,那說明跨域瞭。
跨域是因為瀏覽器的同源策略所導致,同源策略(Same origin policy)是一種約定,它是瀏覽器最核心也最基本的安全功能,同源是指:域名、協議、端口相同
解決跨域常用方法:
一、VUE中常用proxy來解決跨域問題
1、在vue.config.js中設置如下代碼片段
module.exports = { dev: { // Paths assetsSubDirectory: 'static', assetsPublicPath: '/', proxyTable: { // 配置跨域 '/api':{ target:`http://www.baidu.com`, //請求後臺接口 changeOrigin:true, // 允許跨域 pathRewrite:{ '^/api' : '' // 重寫請求 } } }, }
2、創捷axioss實例時,將baseUrl設置為 ‘/api’
const http = axios.create({ timeout: 1000 * 1000000, withCredentials: true, BASE_URL: '/api' headers: { 'Content-Type': 'application/json; charset=utf-8' } })
二、JSONP解決跨域
Jsonp(JSON with Padding) 是 json 的一種"使用模式",可以讓網頁從別的域名(網站)那獲取資料,即跨域讀取數據。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <body> <div id="textID"></div> <script type="text/javascript"> function text_jsonp(req){ // 創建script的標簽 var script = document.createElement('script'); // 拼接 url var url = req.url + '?callback=' + req.callback.name; // 賦值url script.src = url; // 放入頭部 document.getElementsByTagName('head')[0].appendChild(script); } </script> </body> </html>
三、CORS是跨域資源共享(Cross-Origin Resource Sharing),以 ajax 跨域請求資源,支持現代瀏覽器,IE支持10以上
在CORS請求,頭部信息中包含以下三個字段:
Access-Control-Allow-Origin: 該字段是必須的。它的值要麼是請求時Origin
字段的值,要麼是一個*
,表示接受任意域名的請求,
Access-Control-Allow-Credentials: 可選,值為佈爾值,表示是否允許發送Cookie。默認情況下,Cookie不包括在CORS請求之中。設為true
,即表示服務器明確許可,Cookie可以包含在請求中,一起發給服務器。這個值也隻能設為true。如果要發送Cookie,Access-Control-Allow-Origin必須設置為必須指定明確的、與請求網頁一致的域名
Access-Control-Expose-Headers:可選。CORS請求時,XMLHttpRequest
對象的getResponseHeader()
方法隻能拿到6個基本字段:Cache-Control
、Content-Language
、Content-Type
、Expires
、Last-Modified
、Pragma
。如果想拿到其他字段,就必須在Access-Control-Expose-Headers
裡面指定
詳細講解請查看阮大神的文章,傳送門附上:CORS詳解
四、iframe實現跨域
iframe(src){ //數組 if(Array.isArray(src)){ this.docs.visible = true; }else{ this.docs.visible = false; } this.link = src if(this.docs.visible == false){ if(this.$refs['ruleIframe'] && this.$refs['ruleIframe'].querySelector('iframe')){ this.$refs['ruleIframe'].querySelector('iframe').remove() //刪除自身 } var iframe = document.createElement('iframe'); iframe.width = '100%'; iframe.height = '100%'; iframe.setAttribute('frameborder','0') iframe.src = src; this.append(iframe) } }, //創建元素 防止 獲取不到 ruleIframe 遞歸 append(iframe){ if(this.$refs['ruleIframe']){ this.$refs['ruleIframe'].appendChild(iframe); return } setTimeout(()=>{ this.append(iframe); },500) },
總結
到此這篇關於VUE跨域詳解以及常用解決跨域方法的文章就介紹到這瞭,更多相關VUE解決跨域方法內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- vue使用vite配置跨域以及環境配置詳解
- 深入淺析同源與跨域,jsonp(函數封裝),CORS原理
- js前端解決跨域的八種實現方案
- 與iframe進行跨域交互的解決方案(推薦)
- 前端面試必會網絡跨域問題解決方法