代码之家  ›  专栏  ›  技术社区  ›  Radu Maris

远程IP请求HTTP身份验证时从JS Ping问题

  •  0
  • Radu Maris  · 技术社区  · 14 年前

    从JS的Ping的Ameer Dawood Idea开始( pinger ,当远程IP是HTTP服务器时,我遇到了一个问题,请求HTTP身份验证,浏览器弹出框显示用户/密码。如果远程服务器请求auth,我们知道远程服务器正在响应,我需要调用alive()函数(不适用于 http://someBogusUser:someBogusPass@ +IP,因为它再次请求密码,所以我不希望将corect密码保存在客户端脚本中:))
    代码的主要部分是:

    img = new Image();
    img.onload = function() { alive()();};
    img.onerror = function() { unreachable()();};
    
    img.src = "http://" + ip;
    setTimeout(function() { unreachable();}, 1500);
    

    目前,我正在尝试测试是否可以使用xmlhttpRequestreadystate和status来查看远程IP是否响应。
    任何人都有一个如何做到这一点的想法,或者知道另一种方法来测试一个IP是否在JS中是活动的。请不要给我服务器端解决方案(我现在正在使用它们+Ajax)。

    谢谢你

    编辑: 我认为Web工作者会阻止任何身份验证弹出窗口进入浏览器,但他们无法处理DOM事件(onload,onerror),所以工作者无法帮助…:(

    1 回复  |  直到 14 年前
        1
  •  1
  •   bobince    14 年前

    我认为你无法避免。

    这个黑客程序不是任何正常意义上的ping;它不会检查IP是否活动。这是一个HTTP请求,需要经过身份验证、重定向和HTTP的其他方面。(当然,它不会运行HTTP服务器的机器。)任何远程包含方法( img , script , style , iframe )可能会弹出身份验证。

    对于xmlhttpRequest,由于相同的源策略,您将遇到问题。IE和Opera将立即以安全错误使任何尝试失败。火狐和webkit会尝试建立连接,尽管你不能得到任何可用的响应,所以你必须继续从超时长度猜测。对我来说,这本身就是个问题。当然,期望 / 任何一个给定的网页需要1.5秒以上才能返回完整的文档。

    简言之,我认为“平儿”除了有趣的实验外,其他任何东西都不可行。对于任何实际工作,您都必须继续服务器端ping。