首頁 > 軟體

VUE跨域詳解以及常用解決跨域的方法

2022-07-10 14:01:22

跨域

當我們遇到請求後臺介面遇到 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-ControlContent-LanguageContent-TypeExpiresLast-ModifiedPragma。如果想拿到其他欄位,就必須在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解決跨域方法內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com