Я делаю кросс-доменный XHR-запроса. Это прекрасно работает в Chrome, но когда я запускаю в браузере Safari я 'не могу загрузить ---- доступ не разрешено контроля доступа-разрешить-происхождения'. Код точно такой же и я поставил кеш на сервере. Ниже мой код.(контроль доступа, но вы можете попробовать без специального accessToken)
var water;
var req = new XMLHttpRequest;
req.overrideMimeType("application/json");
req.open('GET', 'https://storage.googleapis.com/fflog/135172watersupplies_json', true);
req.setRequestHeader('Authorization', 'Bearer ' + accessToken);
origThis = this;
var target = this;
req.onload = function() {
water = req;
req.send(null);
Посмотрев на заголовки запроса я вижу, что запрос параметров сделан первый и это запрос, который не разрешен. Заголовок происхождения не входит в ответ на сафари, но в хроме. Что бы вызвать это. Любая помощь будет высоко оценили.
Обновление: Я пробовал в сафари для Windows и он работает, поэтому я'м не уверен, что здесь происходит. Mac, который я использую удаленный доступ (Macincloud.com), но я Дон'т думаю, что бы с ней ничего общего.
Я столкнулся с такой же ошибкой при оформлении запроса XHR на файл в Amazon С3. На сафари 7 он был не в состоянии. Я знаю, что вы'повторно не с помощью Amazon S3, но я думал, что я'д сообщение в случае, если это решение помогло другим.
Проблема в том, что сафари 7 установить доступ-контроля-запрос-заголовки заголовка, чтобы "происхождения, в X-просил-с", но мой АРМ технологии CORS конфигурации только на "Х-просил-с":
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>Authorization</AllowedHeader>
<AllowedHeader>x-requested-with</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Я добавил, что "происхождения" в качестве разрешенного заголовка и все работало нормально.
<AllowedHeader>origin</AllowedHeader>
Примечание: AllowedOrigin от *
используется только для разработки. См. @ - Андес комментарий ниже для получения дополнительной информации.
Я просто была подобная проблема, ошибка ПДБС. Это будет работать в Firefox & Хром но не Сафари 10.
Оказалось, нам нужно поставить косую черту на JSON URL-адрес.
Когда я попробовать
в
curl -v -X OPTIONS \
-H 'Origin: fflog.storage.googleapis.com' \
-H 'Access-Control-Request-Method: GET' \
https://storage.googleapis.com/fflog/135172watersupplies_json
Я вам, среди прочих заголовков:
Access-Control-Allow-Origin: *
Когда я выполнить AJAX-запросы от https://storage.googleapis.com/fflog/135172watersupplies_json` из Safari 6.0.4 на Мак ОС 10.8.3 я получаю 403 ошибки, но они все выполняют.
Поэтому я могу только догадываться, что вы пытаетесь отправить аккредитованных запросу, для которых доступ-контроля-разрешить-происхождение подстановочные знаки `` - не допускается.
У меня была такая же проблема, где ПДБС работал в Chrome, но выдал ошибку происхождения в сафари. Оказалось, это была проблема с авторизацией через Kerberos. Когда я загрузил то XHR URL-адрес непосредственно в сафари, мне было предложено ввести учетные данные. После их ввода я вернулся к первоначально месту, и сафари не было ошибки ПДБС.
Для запроса CORS вы должны использовать ваши происхождения fflog.storage.googleapis.com. Если вы используете общие
storage.googleapis.com происхождения, любой сайт может получить доступ к вашей параши.
попробовать попробовать удалить overrideMimeType
? Если задать тип MIME, это будет правильно вернуться.
У меня тоже есть проблема с запросом в Safari пост, но ответа пока нет. Вам хорошо.
Когда я запроса URL-адрес я'м возвращаясь следующие доступ-контроль заголовки:
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: Authorization, Cache-Control, Content-Length, Date, Expires, Server, Transfer-Encoding, x-goog-meta-foo1
Я подозреваю, что это как-то связано с вашим доступом-контроль заголовков - либо вы'вновь что-то пропустил, или слишком конкретными.
Учитывая, что вы'вновь действительно посылает пользовательский заголовок, вы, возможно, захотите попробовать:
Access-Control-Allow-Headers: *
Вы также можете увидеть, если оставляя доступ-контроля-разоблачить-заголовки делает разницу.
Кроме того, было бы полезно, чтобы увидеть фактический запрос / ответ заголовки.
Как в Amazon S3, он работал только в сафари после того, как я добавил более допускается заголовки, контент-тип и диапазон. Один из них сделал работу.
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>Authorization</AllowedHeader>
<AllowedHeader>Origin</AllowedHeader>
<AllowedHeader>X-Requested-With</AllowedHeader>
<AllowedHeader>Content-Type</AllowedHeader>
<AllowedHeader>Range</AllowedHeader>
</CORSRule>
</CORSConfiguration>
попробуйте удалить переопределению типа.
var
jsonhandler=function(){var req=JSON.parse(this.response);console.log(req)},
req=new XMLHttpRequest;
req.open('GET','https://storage.googleapis.com/fflog/135172watersupplies_json');
req.setRequestHeader('Authorization','Bearer '+accessToken);
req.onload=jsonhandler;
req.send();