美文网首页码源
跨站通信总结(Cross Domain)

跨站通信总结(Cross Domain)

作者: 李书文 | 来源:发表于2015-03-10 17:02 被阅读75次

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

    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)

        本文链接:https://www.haomeiwen.com/subject/oldtxttx.html