无法使用jquery'访问授权所需的资源;s阿贾克斯

无法使用jquery'访问授权所需的资源;s阿贾克斯,jquery,ajax,cors,Jquery,Ajax,Cors,我的服务器上有一个webdav主机,名为sidunhosted.com/ungdav/test.json(它是一个虚拟主机) 我拥有/ungdav/的基本授权。这是我为sidunhosted.com/ungdav/提供的.htaccess文件 AuthType Basic AuthName "your unhosted data" AuthUserFile /srv/http/sidunhosted.com/ungdav/.htpasswd Require valid-user Header

我的服务器上有一个webdav主机,名为sidunhosted.com/ungdav/test.json(它是一个虚拟主机)

我拥有
/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(交互转储:)上,这就行了。但如果我从其他网站(交互转储:)调用该命令,则不起作用(返回所需授权),即在firebug控制台上执行此代码,同时在其他网站(已加载jQuery)上执行。

最终找到了答案(8小时后) 问题是,对于CORS请求,浏览器必须能够访问选项和HEAD方法,即使没有身份验证。因此,为了实现上述功能,我们必须像下面这样在
块中绑定
Require-valid-user

<LimitExcept OPTIONS HEAD>
  Require valid-user
</LimitExcept>

需要有效用户

这确保了浏览器可以在未经验证的情况下读取选项和标题。

您的分析似乎不错,但解决方案对我不起作用。在我的apache2上,像您一样取消阻止HEAD请求也允许GET请求。相反,仅阻止GET(使用)也会阻止HEAD请求。。