【问题标题】:Suppressing browser's authentication dialog禁止浏览器的身份验证对话框
【发布时间】:2010-11-12 01:14:00
【问题描述】:

很抱歉已经有类似的问题,但我想更广泛地提出问题。

有没有办法在 Web 应用程序的客户端确定请求资源是否会返回 401 状态代码并导致浏览器显示丑陋的身份验证对话框?

或者,有什么方法可以在 Flash 中加载 mp3 音频资源,在 401 状态代码的情况下会无形地失败,而不是让浏览器显示一个丑陋的对话框?

如果我设置 URLRequest 对象的“authenticate”属性但该属性不在 Flash 运行时中,Adobe Air 运行时将禁止身份验证。任何适用于客户端的解决方案都可以。 XMLHttpRequest 不太可能工作,因为问题中的资源将位于不同的域。

不可见地失败很重要,因为应用程序将有许多音频资源可供尝试的列表,当有许多其他可用时,打扰用户尝试和验证一个是没有意义的。解决方案在客户端上运行很重要,因为有问题的 mp3 来自我无法控制的各种服务器。

【问题讨论】:

    标签: javascript flash http-authentication suppress


    【解决方案1】:

    我在使用 twitter api 时遇到了同样的问题 - 任何受保护的用户都需要客户端进行身份验证。

    我能想出的唯一解决方案是在服务器端加载页面并返回包含其 http 响应代码的 url 列表。

    【讨论】:

    • Twitter API 有一个suppress_response_codes 参数,它将强制响应具有 200 OK 状态。
    【解决方案2】:

    “有没有办法在 Web 应用程序的客户端确定请求资源是否会返回 401 状态代码并导致浏览器显示丑陋的身份验证对话框?”

    不,一般来说不是。 401 响应是服务器指示需要进行身份验证的唯一标准方式。

    【讨论】:

      【解决方案3】:

      只需包装您对可能需要对 Ajax 调用进行身份验证的资源的访问。您可以捕获响应代码,并使用 javascript 做任何您想做的事情(即播放该声音)。如果响应代码正常,则使用 javascript 将用户转发到资源。

      这种方法很可能会在服务器上产生稍多的负载(在某些情况下,您可能不得不多次加载相同的资源),但它应该可以工作。任何关于如何使用 XMLHttpRequest 的好教程都应该包含您需要的所有内容。看看例如http://www.xul.fr/en-xml-ajax.html

      【讨论】:

      • Ajax 不能跨不同的域工作,所以只有页面和资源在同一个域上才能工作。
      【解决方案4】:

      如果您使用 URLRequest 来获取文件,那么您遇到的不仅仅是优雅的错误处理,您还遇到了 Flash 和 AIR 运行时的根本差异。

      如果使用 URLRequest 对象检索文件,您将在每次向未设置策略文件以允许此类请求的服务器的每个请求时从 Flash 收到安全错误。 AIR 允许这些请求,因为它基本上是客户端。这是有道理的,因为它是安装应用程序和访问网页之间的区别。

      我讨厌提供不应答,但是如果您无法进行服务器端调用,并且您正在访问一系列“未知”服务器,那么这将是一条艰难的道路。

      但也许我误解了,你只是想链接到文件并防止用户获得错误链接,还是试图实际加载文件?

      【讨论】:

      • 感谢您的宝贵时间,无论我能否得到我想要的。是的,我正在尝试加载它们并播放它们。不过,任何特定的 url 工作并不重要,因为我有很多尝试。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-04
      • 2014-08-07
      • 2015-07-19
      • 1970-01-01
      • 2014-08-07
      • 1970-01-01
      • 2012-05-12
      相关资源
      最近更新 更多