vue之同源策略


<!doctype html>

vue之同源策略

vue之同源策略

vue請求方式(axios)

axios.get('資源服務器',{
          params:{   //get參數   如https://www.badu.comid=(參數)
                id:參數
          }
          }).then(function(response){   //response是請求成功后返回的數據
        console.log(response)      
          }).catch(function(error){    //error是請求失敗后的返回數據
        console.log(error)  //無法顯示服務端的錯誤,只會接收服務端的錯誤
          })

同源策略報錯

Access to XMLHttpRequest at 'http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.search.catalogSug&query=%E6%88%91%E7%9A%84%E4%B8%AD%E5%9B%BD%E5%BF%83' from origin 'http://localhost:63342' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

關鍵詞:Access-Control-Allow-Origin

只要出現這個錯誤,就是訪問受限。出現策略的攔截問題

同源策略報錯解決方式

同源策略:是瀏覽器的一種保護用戶數據的一種安全機制,瀏覽器會限制ajax不能跨域訪問其他源的數據地址。

同源:判斷兩個同心地址之間,是否協議,域名[ip],端口一致

同源策略報錯原因也是協議,域名和端口有其一不一致的問題

解決方式

ajax跨域(跨源)方案之CORS

CORS是一個W3C標准,全稱是"跨域資源共享",他允許瀏覽器向跨源的后端服務器發出ajax請求,從而克服ajax只能同源使用的限制

實現CORS主要依靠后端服務器中相應數據中在響應頭信息返回信息的

CORS在django中的使用

#django視圖

def post(request):
response = new HttpResponse()
response.set_header("Access-Control-Allow-Origin","http://localhost:63342")
return response;

//在響應行信息里面設置一下內容:
Access-Control-Allow-Origin:ajax所在的域名地址

Access-Control-Allow-Origin:www.oldboy.cn  #

vue中設置

待更新

jsonp

利用跨域標簽來解決的

jsonp可以實現跨域,但是並非ajax技術

核心是利用script標簽

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id="app">
        <input type="text" id="content">
        <button onclick="get_data()">翻譯</button>
        <p id="p1"></p>
    </div>
    <script>
    // jsonp本身並不是ajax
    // jsonp利用的是script標簽的本身特性
    // 實現json需要客戶端和服務端配合
    function hello(data){
        // 自定義業務
        //當點擊之后,發送請求服務器,js會自動調用這個函數(函數名必須和請求連接中的callback參數一致,傳入的參數就是請求響應的參數)
        var p1 = document.getElementById("p1");
        p1.innerHTML = data.data;
        console.log(data);
    }
function get_data(){
    // 通過js的DOM操作創建一個script標簽
    var script = document.createElement(&quot;script&quot;);
    var content = document.getElementById(&quot;content&quot;);
    // 給script標簽設置src屬性為服務端的js腳本
    script.src = &quot;https://api.asilu.com/fanyi/?callback=hello&amp;q=&quot;+content.value;
    console.log(script);
    // 把新建的script標簽追加到網頁給瀏覽器識別
    //通過將處理好的script標簽交給document的head處理,讓瀏覽器識別
    document.head.append(script);
}

&lt;/script&gt;

</body>
</html>

服務端代理


免責聲明!

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



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