跨站通信总结(Cross Domain)

因为网页上要添加跨站通信的功能。于是,一翻搜索和试验,得到了想要的结果。写下来当作总结。

JQuery

JQuery 提供了几种跨站通信的方法

JSONP

$.getJSON('http://server/path/someaction?callback=?', 'JSON data', function(data) {

   // Handle the JSON data

});

callback=? 算是一个固定格式,JQuery在这个HTTP Request发送出去后,会将 '?' 替换成一个随机生成Function Name,HTTP Server得到这个Function Name (假设为JSONP1234)后,在返回数据时可以写入如

JSONP1234('response JSON data')

这样的字符串。实际上就是在返回时,JQuery会执行次Script,将数据传如回调的处理函数中。

AJAX POST

$.ajax({

    type:'POST',

    url: 'http://server/path'

    crossDomain: true,

    data: 'data'

    dataType: 'data type'

    success: function(data, status, qXHR) {

    }

    error: function(data, status, error) {

    }

});

这个没有什么太多需要强调的了,不过,需要注意的是,Server端在HTTP RESPONSE时要加入

Access-Control-Allow-Origin: *\r\n

否则在FireFox中会表现为通信失败,这个 '*' 也可以写成其它制定的域名,并不仅限于 '*'

IE

IE有些特别,在Cross Domain Post中是用了自己提供的API,如果在IE中调用上面Ajax的方法,会有错误发生。

IE 8+以上的版本都支持,XDomainRequest

if ('XDomainRequest' in window) {

    var xdr = new XDomainRequest();

    xdr.onload = function() {

        // Handle Response Data

    }

    xdr.open('POST', 'http://server/path');

    xdr.send('data');

}

需要注意的是,在使用前先判断一下是否可以用 XDomainRequest.

HTTPS

现在很多网站为了安全都使用了HTTPS的通信方法,这里需要注意的是,如果发起跨站通信的网页时HTTPS的,那么将要通信的那端也必须是HTTPS的(并且网站的证书需要受信)否则通信将会失败(如Chrome)

你可能感兴趣的:(跨站通信总结(Cross Domain))