jsonp解決跨域問題


跨域

  由於瀏覽器對javascript的同源策略的限制,例如a.cn下面的js不能調用b.cn中的js,對象或數據(因為a.cn和b.cn是不同域),所以跨域就出現了.

跨域的安全限制都是對瀏覽器端來說的,服務器端是不存在跨域安全限制的。

同源策略

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

實現跨域的方法

  通過jsonp實現跨域

  jsonp 全稱是JSON with Padding,是為了解決跨域請求資源而產生的解決方案,是一種依靠開發人員創造出的一種非官方跨域數據交互協議。

一個是描述信息的格式,一個是信息傳遞雙方約定的方法。

  jsonp的產生:

1.AJAX直接請求普通文件存在跨域無權限訪問的問題,不管是靜態頁面也好.

2.不過我們在調用js文件的時候又不受跨域影響,比如引入jquery框架的,或者是調用相片的時候

3.如果想通過純web端跨域訪問數據只有一種可能,那就是把遠程服務器上的數據裝進js格式的文件里.

4.而json又是一個輕量級的數據格式,還被js原生支持

5.為了便於客戶端使用數據,逐漸形成了一種非正式傳輸協議,人們把它稱作JSONP,該協議的一個要點就是允許用戶傳遞一個callback 參數給服務端,

  (1)jquery的jsonp方式跨域請求

$(function(){
      var name='cc';
      var looks='handsome';
      $.ajax({
            url: "http://localhost:9090/student",
                    type: "GET",
            data:{
              name:name,
              looks:looks
            },
            cache:false,  dataType: "jsonp", //指定服務器返回的數據類型
            jsonp:'theFunction',//用以獲得jsonp回調函數名的參數名(默認為:callback)
    
            jsonpCallback: "showData", //指定回調函數名稱
            success: function (data) { 
                console.info("調用success"); }
           });
      })           

 

jsonp方式不支持POST方式跨域請求,就算指定成POST方式,會自動轉為GET方式;而后端如果設置成POST方式了,那就請求不了了。

  (2)基於script標簽實現跨域

凡是擁有src這個屬性的標簽都可以跨域例如<script><img><iframe>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>

<script type="text/javascript">
    var message = function(data) {
        alert(data[1].title);
    };
</script>

<script type="text/javascript" src="http://web.cn/js/message.js"></script>
</head>
<body>
<div id='testdiv'></div>
</body>
</html>

  (3)vue.js

this.$http.jsonp('http://www.domain2.com:8080/login', {
    params: {},
    jsonp: 'onBack'
}).then((res) => {
    console.log(res); 
})

 


免責聲明!

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



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