gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 03:53:11 25 4
gpt4 key购买 nike

我在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com