【问题标题】:crossDomain heartbeat cant parse jsonp data with jquery跨域心跳无法用jquery解析jsonp数据
【发布时间】:2011-12-08 00:09:40
【问题描述】:

我将我的模块(一个 asp.net 项目)嵌入到“门户”中,该门户会为我的 url 生成一个 iframe,我知道它很糟糕,但我没有做到。
为了避免在用户使用我的 Web 项目进行迭代时在主“门户”端进行会话,门户所有者告诉我通过 javascript 从我的应用程序到门户启动心跳。
每个人都知道以这种方式保持会话是不安全的,但是“门户”在那里我无事可做。
真正的问题是我不能从我的应用程序到门户网站的跨域请求,因为same origin policy 锁定它,我找到了一个使用 jquery 的解决方案,但它需要 [heartbeat listener] 处理 json。
jsonp官方网站here.
有人可以帮助我吗?
有我的脚本:

function startHeartbeat() 
{
    var interval = 9513575;
    window.setInterval(
         function () {
             $.ajax({
                 type: "GET",
                 cache: false,
                 async: true,
                 crossDomain: true,
                 url: "http://www.theportalurl.com",
                 dataType: 'JSONP',
                 complete:function(jqXHR, textStatus){                    
                     alert("Complete");
                 },
                 success:function(json){                    
                     alert("Success");
                 },
                 error:function(jqXHR, textStatus, errorThrown){
                     alert("Error:" + textStatus + ", detail:" + errorThrown);
                 },
            });

         }
     , interval
     );
}

在@rook 给我帮助后,我达到了这个目标:

function startHeartbeat(pgn) 
{
    $("body").append("<img id='heartbeat' style='width:1px; height:1px' name='heartbeat' src='http://www."+Math.random()+".org'/>");
    var interval = 350000;
    window.setInterval(
         function () {
            var rnd = Math.random();
            var url = "https://www.theportal.com/refreshsession.aspx?pgn="+pgn+"&rndv="+rnd;
            $("#heartbeat").attr("src", url);
         }
     , interval
     );
}

【问题讨论】:

    标签: jquery json security same-origin-policy heartbeat


    【解决方案1】:

    您正在尝试做的是明显违反 JavaScript 的同源策略。一个好的解决方案是门户所有者可以为您想要使用 XHR 获取的页面(并且页面)设置此 http 标头元素。

    Access-Control-Allow-Origin: @987654321@

    来源:http access control

    【讨论】:

    • 非常感谢您的回答,但我无法更改门户,无法更改代码,无法更改配置,也许我可以将我的应用程序放在同一个根目录下 theportalurl.com/myapplicationhere
    • @newway 如果它在同一个域上那么你应该没有问题,另一个解决方案是“跨域代理”。
    • 非常感谢。它不在同一个域中,但我会向我的管理员索要它,我不能随意将手放在服务器上,也不想要它;)然后放在同一个域中成为最后一种独特的可能性。
    • @newway 另一件事,如果你不担心得到响应,你可以在页面上写一个不可见的 标签,它会触发一个 get 请求。这通常用于 XSRF/CSRF 漏洞利用。
    • 再次感谢。我可以在门户主页中定位一些图像。无法更改门户。你在说吗:intelliproject.net/articles/showArticle/index/…
    猜你喜欢
    • 2014-03-18
    • 2013-07-17
    • 2013-04-04
    • 2013-09-26
    • 2013-10-23
    • 1970-01-01
    • 2013-01-04
    • 2012-11-05
    • 2011-07-27
    相关资源
    最近更新 更多