如何防止Safari拦截401对ajax请求的响应
How to prevent Safari from intercepting 401 responses to ajax requests
我在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协议错误,它可能会造成副作用(从未见过或听说过这种情况发生,但可能会导致一些未来的浏览器或反劫持软件试图启动故障排除/诊断)。
412
是我看到使用的另一种替代方案("前置条件失败"),但它实际上意味着服务器没有达到请求设置的前置条件。
或者,您可以弥补自己的非标准4xx
错误,例如461
,这是允许的(例如,请注意twitter有一个自定义的420
状态代码)
更正确的方法是继续使用401
作为错误代码,但在凭据已发送但不正确时不发送WWW-Authenticate
标头。
这不再触发浏览器的对话框,并允许您直接处理401
。
- ajax请求的顺序总是不同的
- 从ajax请求中获取javascript对象
- Ajax请求文档就绪会导致jquery加载缓慢
- MockJax没有在JavaScript应用程序中发送对我AJAX请求的响应
- 正在传递JSONP标头's数据参数到另一个文件中的AJAX请求
- JavaScript代码未正确检查ajax请求
- "日期“;AJAX请求返回的类型值未定义
- 在等待ajax请求时显示微调器并禁用页面
- 跨域ajax请求
- Ajax请求返回空的数据字符串,但首先得到了正确的数据
- Javascript-如何让脚本与Ajax请求的数据一起运行
- ajax请求成功,但可以'我看不到我的数据
- 如何将给定的curl命令复制为jquery ajax请求
- 为什么我能够从javascript控制台发送跨域ajax请求
- 一台特定计算机的Ajax请求数据未定义/失败
- 获取ajax请求的请求头
- 原型Ajax请求参数为嵌套json
- 可以't从AJAX请求中筛选数据
- jQuery Mobile Collapse上的AJAX请求
- 暂停函数执行流程,直到ajax请求完成