无法使用jquery的ajax访问授权所需的资源

时间:2011-06-22 21:08:15

标签: jquery ajax cors

我的服务器上有一个名为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>

1 个答案:

答案 0 :(得分:2)

终于找到了答案(8小时后) 问题是对于CORS请求,即使没有身份验证,浏览器也必须能够访问OPTIONS和HEAD方法。因此,为了完成上述工作,我们必须将Require valid-user绑定在<LimitExcept>块中,如下所示

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

这可确保浏览器无需经过身份验证即可读取OPTIONS和HEAD。