【发布时间】:2012-06-01 22:39:02
【问题描述】:
我将我的 Jetty 服务器配置为允许跨域 http 请求 (allowedOrigins = *) 并允许使用其 CrossOriginFilter 进行跨域身份验证 (allowCredentials=true)。 没有身份验证要求的跨域 http 请求可以正常工作。现在,当涉及到需要身份验证的 http 调用时,使用 JQuery 无法解决。我使用以下代码并遵循此示例:http://www.aswinanand.com/2009/01/http-basic-authentication-using-ajax/
function login(username, password) {
$.ajax({
type: "GET",
contentType: "application/json",
dataType: "json",
url: url,
beforeSend: function(xhr) {
var base64 = Base64.encode(username + ":" + password);
xhr.setRequestHeader("Authorization", "Basic " + base64);
xhr.withCredentials = true;
},
error: function(data){
alert("error");
},
success: function(data){
alert("success");
}
});
在 HTTPFox 中,我看到对服务器的以下请求:
OPTIONS /login HTTP/1.1
...
Access-Control-Request-Method GET
Access-Control-Request-Headers authorization,content-type
服务器响应
HTTP/1.1 204 No Content
...
Allow OPTIONS,GET,HEAD
我也使用了下面的选项,这并没有什么不同。
$.ajax({
...
username: username,
password: password,
...
}
错误函数总是触发。 有人知道问题可能是什么吗?
【问题讨论】:
-
您在响应标头
Access-Control-Allow-Origin:*中看到了吗?顺便说一句,好问题!欢迎使用 StackOverflow! -
我认为,如果您也可以显示与该问题相关的任何堆栈跟踪,那将会很有帮助。
-
好的,请检查该标题是否包含在您的回复中。如果不是,那么安全性可能会覆盖响应标头。需要查看更多日志以进一步调试。祝你好运! :)
-
@jmort253:不,我在服务器的响应中没有看到这个标头。码头的安全?我可以提供什么样的日志或堆栈跟踪?
-
这将在框架或服务器级别。服务器通常以比您的应用程序低得多的级别记录事物,因此您需要修改 logging.properties(或您使用的任何记录器)并将其设置为在 DEBUG 或 ALL 上记录,以便您可以查看服务器和框架的内容正在做幕后工作。您正在寻找在没有 Access-origin 标头的情况下设置的标头的任何实例
标签: jquery http authentication cross-domain jetty