Не удается получить доступ к ресурсу, необходимому для авторизации, с помощью jjery's ajax - PullRequest
1 голос
/ 23 июня 2011

У меня на сервере есть хост webdav, который называется sidunhosted.com/ungdav/test.json (это виртуальный хост)

У меня есть базовая авторизация на /ungdav/.Это мой .htaccess файл для sidunhosted.com/ungdav/.

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/), т.е. выполняю этот код на консоли Firebug, находясь на каком-то другом веб-сайте (с загруженным jQuery).).

1 Ответ

2 голосов
/ 23 июня 2011

Наконец нашел ответ (через 8 часов) Проблема в том, что для запросов CORS браузер должен иметь доступ к OPTIONS и методу HEAD даже без аутентификации.Следовательно, для того, чтобы вышеуказанное сработало, мы должны связать Require valid-user в блоке <LimitExcept> следующим образом

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

Это гарантирует, что браузер сможет читать OPTIONS и HEAD без аутентификации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...