正在设置的 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 限制。

我将通过 jQuery xhr 请求发送到远程站点 (这是扩展,铬和设置的所有跨站点设置 … …):$.ajax({ type: "POST", contentType : "text/xml", url: some_url, data: some_xml, username: user, password: pass, success:
在现行的网站应用中 URL 重定向 的应用有很多: 404页面处理、网址改变(t.sina转到weibo.com)、多个网站地址(如:http://www.google.com/ 、www.g.cn )等; 本质上就是将当前使用者的网址从一个网址导向到另外的一个网址上面去; 实现 重定向 的方式有很多种,有服务器端配置、后端程序 重定向 处理、前端js 重定向 ; 先来说下前端从定向的实现:在众多的BOM对...
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NS URL Request *)request navigationType:(UIWebViewNavigationType)navigationType{ // 添加 请求头 信息 NSMutable URL Request *mutableRequest =
修改 公司的老项目中,遇到了一个问题,就是session失效的时候,在页面没有刷新的情况下,点击操作无效,查了一下,原因是 ajax 机制无法实现 重定向 ,查了很久的资料,现有一下解决方法(都是百度得来的,自己整理一下方便以后使用) 1. ajax 是默认就是不支持 重定向 的,它是局部刷新,不重新加载页面。 2.我的解决办法就是从前后端都做处理,项目中遇到 重定向 大多出现在拦截器或者过滤器中。在项目中我使...
在项目中,考虑到web前台 ajax 请求 未登录资源时,后台返回的 重定向 信息, ajax 不能自动判断是否是 重定向 ,以下是一种折中方法,如各位有什么更好的方法,还请告诉我一声,哈哈 下面进入正题............. LoginInterceptor. java : import java x.servlet.http.HttpServletRequest; import java x.servlet.
一、 ajax 重定向 的问题。 默认 ajax 是不支持 重定向 的,因为 ajax 本身就是局部刷新,不重新加载页面的。如果需要用到 重定向 可以通过以下方法: 第一步:后端代码改造。 在后端(大部分情况都是拦截器)中判断是否需要 重定向 。 Eg:session过期判断,当判断session已经过期了,就先判断此次 请求 是否是 ajax 请求 。 String type =request.getHead