javascript - 如何防止Safari拦截ajax请求的401响应

标签 javascript ajax safari

我在 Safari 扩展中遇到以下问题。我要求用户提供他们的网络服务用户名/密码,并发送一个快速请求以验证凭据是否正确。如果不是,该服务将以我认为应该的方式响应 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 协议(protocol)错误,它可能会导致副作用(从未见过或听说过)发生,但有可能,它可能会导致某些 future 的浏览器或反劫持软件试图开始故障排除/诊断的过度帮助尝试。

412 是我见过的另一种选择(“前提条件失败”),但它实际上是为了表明服务器没有达到要求请求设置的先决条件。

或者您可以编写自己的非标准 4xx 错误 - 例如461 - 这是允许的(注意 twitter 有一个自定义的 420 状态代码,例如)

关于javascript - 如何防止Safari拦截ajax请求的401响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9137611/

相关文章:

javascript - 递归地进行多个 AJAX 调用是一个坏主意

javascript - 在 Safari (Windows) 中使用 html5/js 音频时出现问题

javascript - Safari 6.1 在固定 div 内绝对定位 div 时出现奇怪的错误

javascript - Apple 的 Gallery Overlay Lightbox

javascript - 使用 Gson 将属性添加到 Json 数组

javascript - 尝试将 CSS 注入(inject)网页而不是将 CSS 注入(inject)自身的扩展

javascript - 你能帮我用几行来简化一段 JavaScript 代码吗?

ajax - 使用 Ajax 从 Servlet 下载文件

javascript - Ajax 将 bool 值与 HTML 一起从服务器传递到具有 HTML 数据类型的客户端

javascript - 使用 localStorage 时在 iPhone 上出现安全错误