web跨域問題解決方案

來源:互聯網
上載者:User

標籤:ack   連接埠   支援   var   sha   問題解決   127.0.0.1   html   oct   

在前端開發及調試過程中總能遇到瀏覽器報如下錯誤:

Response to preflight request doesn‘t pass access control check: No ‘Access-Control-Allow-Origin‘ header is present on the requested resource.

該錯誤由瀏覽器的同源策略(同ip,同連接埠,同協議視為同一個域,一個域內的指令碼僅僅具有本域內的許可權,可以理解為本域指令碼只能讀寫本域內的資源,而無法訪問其它域的資源。這種安全限制稱為同源策略。 )所引起的。

解決方案

1.CORS(Cross-Origin Resource Sharing)是W3C在05年提出的跨域資源請求機制,它要求當前域(常規為存放資源的伺服器)在響應前序添加Access-Control-Allow-Origin標籤,從而允許指定域的網站訪問當前域上的資源。

不過CORS預設只支援GET/POST這兩種http請求類型,如果要開啟PUT/DELETE之類的方式,需要在服務端在添加一個"Access-Control-Allow-Methods"前序標籤

2.JSONP

JSONP(JSON with Padding)是JSON的一種“使用模式”,主要是利用script標籤不受同源策略限制的特性,向跨域的伺服器請求並返回一段JSON資料。

用戶端

---------------------------------------------------------------

<!DOCTYPE html>
  <html>
    <head lang="en">
    <meta charset="UTF-8">
    <title>JSONP</title>
    <script src="jq.js"></script>
    </head>
  <body>
  <div></div>
  <script>
    $.ajax({
      url:‘http://127.0.0.1:1234/‘,
      dataType:"jsonp", //告知jQ我們走的JSONP形式
      jsonpCallback:"abc", //callback名
      success:function(data){
        console.log(data)
        }
      });
  </script>
  </body>
  </html>

-------------------------------------------------------------------------------

服務端

------------------------------------------------------------------------------

var http = require(‘http‘);
var urllib = require(‘url‘);

var data = {‘name‘: ‘vajoy‘, ‘addr‘: ‘shenzhen‘};

http.createServer(function(req, res){
res.writeHead(200, { ‘Content-type‘: ‘text/plain‘});
var params = urllib.parse(req.url, true);
//console.log(params);
if (params.query && params.query.callback) {
//console.log(params.query.callback);
var str = params.query.callback + ‘(‘ + JSON.stringify(data) + ‘)‘;//jsonp
res.end(str);
} else {
res.end(JSON.stringify(data));//普通的json
}
}).listen(1234)

--------------------------------------------------------------------------------

不過JSONP始終是無狀態串連,不能獲悉串連狀態和錯誤事件,而且只能走GET的形式。

 

http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html 參考博文

web跨域問題解決方案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.