首先,我正在谷歌浏览器工作,如果这有帮助。这里是行为:
我通过jQuery发送xhr请求到一个远程站点(这是一个chrome扩展,我设置了所有的跨站点设置…):
$.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,error){ alert(xhr.status); } });
正在设置的网址返回302(这是预期的),Chrome跟随重定向(也是预期的)。
新网址会返回凭据提示,不会从原始请求中提取凭据,因此Chrome会显示一个登录对话框。如果我放入原始的凭据,我会收到有关发送的无效请求的响应(这是一个有效的HTTP请求 – 200 – 远程服务器不喜欢其中一个标头)。
在Chrome中查看开发者视窗时,发送了两个请求。第一个是在AJAX请求中设置的所有设置的原始URL。第二个是重定向URL,使用“GET”的方法,“POST”字段中没有任何内容,没有凭据。
我可以做什么,我很失落。我需要:
>获取重定向网址,以便我可以发送第二个请求(xhr.getResponseHeader(“Location”)不起作用)
>让新的重定向请求保留原始请求中的设置,或者
>获取错误来源的最终URL,以便我可以发送另一个请求。
理想情况下,我不希望用户在这个对话框中再次放入他们的凭据,但是如果我能够得到最终的URL,我可以采取一切。
解决方法
您没有与您的请求相关联的认证会话吗?您是否填写某些标头以进行身份验证,或者是否使用类似于HTTP基本身份验证的内容?
另外,如果你有一个302,是不是因为你没有首先认证,或者是有效的302,这是正如预期的?这很重要,因为如果您没有首先认证,那么您所遵循的GET请求需要进行身份验证。