我在 Safari 扩展中遇到以下问题。我要求用户提供 Web 服务的用户名/密码,并发送一个快速请求以验证凭据是否正确。如果不是,该服务将响应 401,我认为它应该如此。问题是 Safari 似乎在我的 javascript 代码可以处理它之前拦截了这个响应,显示灰色登录框而不是让我处理错误。
我能做些什么吗?我使用 js 库来进行调用,但它在功能上等同于以下 jQuery。
$.ajax({
type: "GET",
url: url,
username: username,
password: password,
success: function() { /* handle success */ },
error: function() { /* handle error */ }
});
据我所知(在我自己遇到这个问题之后),你不可能让 Safari 停止拦截401
。如果这些发现是正确的,唯一的方法是创造性地(阅读:错误地)使用另一个错误代码,例如403
,或使用自定义的(见下文)。
当然,这假设您有权更改从 Web 服务发回的状态代码(如果您也开发了 Web 服务,则问题并不完全清楚)。
403
当然,实际上是说“您已经通过身份验证,但无权访问此资源”,这是不正确的(因此是“滥用”),但至少它在我知道的浏览器中没有副作用。
400
有时用作替代方案,但由于该请求(“错误请求”)实际上意味着 HTTP 协议错误,因此它可能会导致副作用(从未见过或听说过它发生,但有可能,它可能会导致过度 -某些未来浏览器或反劫持软件开始故障排除/诊断的有用尝试)。
412
是我见过的另一种选择(“前提条件失败”),但它实际上意味着表明server没有达到先决条件request set.
或者你可以制作自己的非标准4xx
错误 - 例如461
- 这是允许的(请注意,twitter 有一个自定义420
状态码,例如)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)