[jquery]AJAX 重定向的困境,如何重定向 URL 或如何设置重定向请求的属性

我将通过 jQuery xhr 请求发送到远程站点 (这是扩展,铬和设置的所有跨站点设置 … …):

$.ajax({
    type: "POST",
    contentType : "text/xml",
    url: some_url,
    data: some_xml,
    username: user,
    password: pass,
    success: function(data,status,xhr){
        alert(data);
    },
    error: function(xhr, status, error){
        alert(xhr.status);
    }
});

正在设置的 URL 返回 (这预计),302 和铬遵循重定向 (还预计)。

新的 URL 返回都被扯不从原始请求,因此铬显示登录对话框的凭据的提示。如果我把原始凭据中,我取回有关无效请求发送的响应 (它是一个有效的 HTTP 请求 — — 200 — — 远程服务器就不像一个标头)。

查看开发人员窗口中铬时, 有两个请求发送。第一是原始 URL 的 AJAX 请求中设置的所有设置。第二个是没有从"开机自检"字段中,并没有凭据重定向 URL,与"GET",一种方法。

我不能做什么的损失。我也需要:

  1. 获取重定向 URL,这样我就可以发送第二个请求 (xhr.getResponseHeader("Location") 不起作用),

  2. 有新的重定向请求保留的设置从原始请求,或

  3. 获取错误来自,这样我就可以发送另一个请求,最终的 URL。

理想情况下,我不想要放在其凭据的第二次,在此对话框中,用户,但我会看得最后的 URL,如果我可以得到什么。

解决方法 1:

基于您的问题,我不是完全肯定的如果你指 HTTP 身份验证或基于窗体的身份验证方案,因此,我将讨论两个。

获取重定向 URL,这样我就可以发送第二个请求 (xhr.getResponseHeader("Location") 无法正常工作),

XHR 一般建造的方式 (和铬专门): XHR 并不是非常灵活,并提供一个较高级的 API,相同的行为与浏览器在其他所有的请求 (地址栏 url、 图像源 url、 嵌入式的脚本的 url)即透明处理重定向。没有事件将引发的 JavaScript 通知您此重定向或中间的 302/301 状态代码中,您将只能收到的最终状态代码和数据。因此,它是无法检索"的位置标头的响应,最终响应将不会包含"的位置标头。

具有新的重定向请求保留从原始请求设置

XHR 不提供这作为一个选项,是不正确的默认行为。为什么这会和不应该为默认的示例:

Acme 公司提供 URL 短链接服务,为其雇员。我点击短链接接收来自一位同事,并使用 HTTP 身份验证提示输入的 Acme 的短链接服务。重定向发生后这种身份验证。没有理由被重定向到的网站应要求我的凭据,因此是不正确的行为,将此信息传递的浏览器 (和事实上的安全问题)。同样,不应转发发送数据,因为它可能只供消费的 pre-direct 的 URL。

获取错误来自,这样我就可以发送另一个请求,最终的 URL。

不幸的是,为安全起见和标准定义,标准的 XHR 对象 (包括用于跨站点请求中的扩展的一个镶边) 不提供任何方式来访问,最终的 URL,其中有一个错误。您只能访问 HTTP 的最终状态和最终的 URL 返回任何数据。

--

在这种情况,有几个选项取决于您对这种情况多少控制:

1) 如果您有重定向服务器的控制权,考虑包括信息。在您的 AJAX 请求指示 AJAX 客户端,,而是返回指示应重定向的数据 (即 json 对象) 的服务器。

或者,如果它是打算总是通过身份验证的数据,考虑实施一些会议通过或包括身份验证信息的机制。在 URL 中被重定向到如此的目标 URL 可以使用此信息。

2) 如果您拥有的重定向的目标的控制权,生成的身份验证失败的页时考虑的目标 URL。XHR 对象将有权访问此响应数据,并可以解析它继续进行新的请求。

3) 如果您有没有控制重定向的网站或目标站点,请考虑托管代理服务器处理的请求,并专门赶 302 的。

http://myserver/?url=http://redirectsite.com&user=...&pass=...

4) 如果没有上述选项,至少是可取的但可行的选项,是 NPAPI 扩展名为运行本机代码的铬。这将使您的请求,完全控制,并且使您能够做很多事情。但是,请注意这是牺牲的更复杂的发展,潜在的安全问题,并减少用户可取。

解决方法 2:

不幸的是,没有办法防止 xhr 从自动跟随重定向或设置重定向目标 (它会相当不安,反正因为这将使第一个站点将重定向到 任何 站点的凭据,不只一个你要让他们) 的凭据。

解决方法 3:

您可以尝试的此处介绍的解决方案类型: 如何管理后的 JQuery Ajax 调用重定向请求

这意味着,实际上取代 HTTP 协议,你要控制服务器以及。所有的 ajax 响应将在代码中 200 (或至少 3xx 的、 不 401/403) 与 json 对象。与此 json 对象中,您可以提供一些特定的错误代码 (为什么不重用

然后,您将扩展 jQuery.ajax 函数来捕获论文特殊代码在您的 json 响应,并进行所需的新请求。事实上 jQuery 自动重定向调用是你而不是 jQuery。

起初这看起来丑陋,但处理问题时喜欢建议在链接中的一个 (结束的会话,重定向在登录页上) 似乎有完整的协议,在您的客户端和服务器之间的 ajax json 通信处理不是一个糟糕的主意。

解决方法 4:

您可以控制服务器的情况下您可能嵌入迷失在自己的重定向地址的数据。Xhr 后,不会,然后作为获取参数并获取一些编码回 (由服务器) 的发布数据。没有其他的解决方案来我...

解决方法 5:

你不有伴您请求的身份验证的会话吗?你填充一些头文件以进行身份验证或您正在使用类似于 HTTP 基本身份验证来做这件事吗?

此外,如果你 302,因为您不放在第一位身份验证,或者是正如预期的有效 302?这是重要的因为如果你不放在第一位验证,您随后的 GET 请求需要进行身份验证,不管怎么说。

  • Sukhdev)
解决方法 6:

你能用 windows.location="newURL"吗?用于重定向为我工作

解决方法 7:

如拉吉夫 · 有上文所述,你不能赶上 302 重定向使用 XHL 对象或 AJAX 的请求。

您的最佳匹配是设置在 PHP/ASP 的某种类型的代理或任何服务器端脚本语言。PHP 脚本只需将按照 302 重定向,直到到达最终目的地。然后,它可以将最终的 URL 发送回 JavaScript 页面。现在以后的 AJAX 请求可以直接发送到最终已知的 URL。

或者...

您的 PHP 脚本将只作为代理。所有请求将都发送到此 PHP 脚本。

或者...

只是硬编码到 JavaScript 应用程序,如有可能,(虽然我假定它是不可能在您的情况下),最终的 URL。

抱歉 — — 我也讨厌的"不能做这种"的答案,但有一些还没有完全已解决了尚未的 JavaScript 限制。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值