【问题标题】:Test url availability with javascript使用 javascript 测试 url 可用性
【发布时间】:2011-04-07 05:55:13
【问题描述】:

是否可以通过 jQuery(或纯 javascript)来测试另一个域上的网页是否可用? 我尝试使用 ajax 调用获取响应标头,但无论我测试我自己域之外的哪个站点,我都会收到错误消息。

那么我真的需要在我的服务器上使用代理脚本还是可以跳过该请求?

【问题讨论】:

    标签: javascript jquery ajax http-headers


    【解决方案1】:

    是否可以通过 jQuery(或纯 javascript)来测试另一个域上的网页是否可用?

    由于same origin policy restriction,您需要在您的服务器上使用代理/网桥,除非远程服务器实现JSONP,显然我们不能假设一般情况。

    【讨论】:

      【解决方案2】:

      您可以创建一个<img> 标记,指向外部域上的现有图像。

      如果onerror 事件触发,则图像甚至整个站点都将关闭。

      如果它在 5 秒左右后触发,它可能会超时,因此整个站点可能会宕机。

      【讨论】:

      • 远程域没有镜像怎么办? onerror 将触发,但这并不表示域不存在。
      • @Darin:这就是我写(or the image)的原因。
      • 在这种情况下,你不应该写the site (or the image) is down,你应该写the image is down,因为这是我们可以做出的唯一客观结论(对于我的吹毛求疵:-))。跨度>
      • @DarinDimitrov 它不一定是要作为图像加载的图像。它将作为图像损坏,但作为 HTTP 请求仍然有效。例如,<script> 标签在这种情况下可以正常工作。它会在解析 HTML 而不是预期的 JS 时触发 SyntaxError,但不会调用 onerror,除非请求确实存在问题。坏消息是,在 IE 中它不起作用:onerror 永远不会被调用。在 Firefox 中,它工作得很好。另一个坏消息是,由于此解决方案的事件驱动性质,无法编写同步的isWorking(url) 函数。
      【解决方案3】:

      是的,您需要在您的服务器上使用代理脚本。根据the same-origin policy,JavaScript 不能在浏览器中用于跨域请求资源。

      【讨论】:

      • 我相信我在某个地方读到了您可以访问标题的内容——而这正是我所需要的。如果那不可能,那为什么?如果我能看到响应是否为 200,会不会有安全风险?
      • 这是不正确的。您可以跨域请求资源;只需考虑 iframe、带有 src 指向另一个域的 img 标签或样式和脚本(例如,从远程位置包含的 jQuery)。实际上有一种方法可以查看网站是否可用,但是我还不能让它与 MSIE 一起工作。
      • @Powerslave 这个答案真的已经过时了:en.wikipedia.org/wiki/Cross-origin_resource_sharing
      • @MattBall 可能也可能不是这样。 CORS 还不是一个合适的标准,可能需要为不支持 CORS 的浏览器提供某种解决方法。此外,您可能无法控制远程站点的源/行为设置,仍然需要检查它是否存在。
      猜你喜欢
      • 2013-04-30
      • 2013-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多