是否可以在没有服务器同意的情况下进行跨域ajax请求?

时间:2014-04-17 13:23:54

标签: javascript html ajax http same-origin-policy

我理解同源策略的概念及其原因,我理解CORS可以实现跨域请求。但我想知道,当服务器没有在响应中返回“Access-Control-Allow-Origin”标头时,与服务器跨域通信是否有任何可能的方式,无论多么可能是非常规的。

我不想攻击任何东西。我只想合法地从远程域登录到Web应用程序(我没有Web应用程序)并触发一些选定的功能,这将导致检索一些数据。

有人能告诉我这是否可能,以及我如何去做。如果不能直接进行ajax调用,那么甚至可能在我自己的站点中嵌入一个包含目标Web应用程序的隐藏iframe并以某种方式操作它?

1 个答案:

答案 0 :(得分:1)

你可以使用雅虎查询语言获得:D

这是一个扩展的jquery ajax函数for dooing so

    jQuery.ajax = function (e) {
    function o(e) {
        return !r.test(e) && /:\/\//.test(e)
    }
    var t = location.protocol,
        n = location.hostname,
        r = RegExp(t + "//" + n),
        i = "http" + (/^https/.test(t) ? "s" : "") + "://query.yahooapis.com/v1/public/yql?callback=?",
        s = 'select * from html where url="{URL}" and xpath="*"';
    return function (t) {
        var n = t.url;
        if (/get/i.test(t.type) && !/json/i.test(t.dataType) && o(n)) {
            t.url = i;
            t.dataType = "json";
            t.data = {
                q: s.replace("{URL}", n + (t.data ? (/\?/.test(n) ? "&" : "?") + jQuery.param(t.data) : "")),
                format: "xml"
            };
            if (!t.success && t.complete) {
                t.success = t.complete;
                delete t.complete
            }
            t.success = function (e) {
                return function (t) {
                    if (e) {
                        e.call(this, {
                            responseText: t.results[0]
                        }, "success")
                    }
                }
            }(t.success)
        }
        return e.apply(this, arguments)
    }
}(jQuery.ajax);

这会将请求发送到具有正确accept-headers的yql,并且yql将返回所请求的url的内容,即使它没有正确的标题