8

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

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

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

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

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

4

4 回答 4

1

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

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

于 2009-07-19T03:11:18.860 回答
0

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

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

于 2009-07-19T03:13:14.427 回答
0

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

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

于 2009-07-19T12:32:27.433 回答
0

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

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

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

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

于 2009-07-19T20:34:29.510 回答