我的服务器上有一个名为sidunhosted.com/ungdav/test.json的webdav主机(它是一个虚拟主机)
我对/ungdav/
拥有基本授权。这是sidunhosted.com/ungdav/的.htaccess
文件。
AuthType Basic
AuthName "your unhosted data"
AuthUserFile /srv/http/sidunhosted.com/ungdav/.htpasswd
Require valid-user
Header always set Access-Control-Allow-Methods "GET, POST, DELETE, OPTIONS, PUT"
Header always set Access-Control-Allow-Headers "Content-Type, X-Requested-With, X-HTTP-Method-Override, Accept, Authorization"
Header always set Access-Control-Allow-Credentials "true"
Header always set Cache-Control "max-age=0"
Header always set Access-Control-Allow-Origin *
我正在使用以下jQuery代码(使用firebug)来访问资源
$.ajax({
url: "http://sidunhosted.com/ungdav/test.json",
cache: false,
dataType: "text",
headers: {Authorization: "Basic "+btoa("smik:asdf")},
fields: {withCredentials: "true"},
success: function(text){
alert(text);
}
});
如果我在sidunhosted.com上(交互转储:http://paste.pocoo.org/show/417127/),这是有效的。但是如果我从其他网站(转移转储:http://paste.pocoo.org/show/417128/)调用它,则不起作用(返回需要授权),即在其他网站(加载了jQuery)时在firebug控制台上执行此代码。 / p>
答案 0 :(得分:2)
终于找到了答案(8小时后)
问题是对于CORS请求,即使没有身份验证,浏览器也必须能够访问OPTIONS和HEAD方法。因此,为了完成上述工作,我们必须将Require valid-user
绑定在<LimitExcept>
块中,如下所示
<LimitExcept OPTIONS HEAD>
Require valid-user
</LimitExcept>
这可确保浏览器无需经过身份验证即可读取OPTIONS和HEAD。