Как получить внешние данные без заголовков CORS с веб-приложением, размещенным в Firebase?

У меня есть приложение Ionic2, размещенное на Firebase. Мне нужно получить внешние данные из службы API, где

В запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin».

Я могу обойти это локально, используя прокси в файле ionic.config.json:

"proxies": [
{
"path":"/api",
"proxyUrl": "https://api.somwhere.com/"
}
]

Но я понятия не имею, как с этим справиться после развертывания моего приложения в Firebase. Это как-то возможно?


person johnerfx    schedule 21.03.2017    source источник
comment
Не знаком с Firebase, но в основном CORS — это реализованное в браузере решение для реализованного в браузере ограничения на запросы ajax. Таким образом, единственная альтернатива — избегать междоменных запросов с помощью прокси-сервера (или вместо этого сервер выполняет запрос, что в основном представляет собой обходной путь того же типа). Вам следует изучить варианты проксирования, разрешенные Firebase.   -  person snorkpete    schedule 21.03.2017
comment
Удачи решить это? У меня есть ощущение, что изменение должно произойти там, где размещена служба API... но что, если мы не сможем получить к ней доступ или изменить ее?   -  person Jeremy C.    schedule 11.04.2017
comment
Не повезло, я пока использую cors-anywhere.herokuapp.com.   -  person johnerfx    schedule 11.04.2017


Ответы (3)


В документах Firebase есть пример установки Access-Control-Allow-Origin в вашем firebase.json на разрешить кросс-происхождение запросов для файлов шрифтов. Вы можете настроить это следующим образом:

"headers": [ {
  "source" : "**",
  "headers" : [ {
    "key" : "Access-Control-Allow-Origin",
    "value" : "*"
  } ]
}

Это позволит выполнять запросы из разных источников для всех ресурсов. Конечно, если вы хотите ограничить его определенными ресурсами, вы можете настроить значение source.

person sideshowbarker    schedule 31.03.2017
comment
Нам нужно, чтобы срок действия кеша истек, прежде чем это сработает. Это мой firebase.json, и я все еще получаю ошибку CORS. { hosting: { public: ./src/empty, headers: [ { source : *, headers: [ { key : Access-Control-Allow-Origin, value: } ] } ] } } - person Xerri; 03.07.2017
comment
Обратите внимание, что ошибка CORS (из источника 'localhost:8100' была заблокирована политикой CORS: No 'Access-Control- Заголовок Allow-Origin присутствует в запрошенном ресурсе.) при попытке доступа и изображения из хранилища Firebase не в папке, размещенной - person Xerri; 03.07.2017
comment
Вам нужно дождаться истечения срока действия кеша, да. Либо так, либо, если вы можете, заставить браузер принудительно (повторно) загрузить ресурсы. Но это не обязательно работает для обхода промежуточных сетевых кешей/прокси. - person sideshowbarker; 04.07.2017
comment
Я все еще пытаюсь понять, как кэшировать изображения из хранилища Firebase. Мне нужно получить изображения с помощью Ajax, чтобы получить ресурс, но я получаю ошибку CORS, указанную выше. - person Xerri; 04.07.2017
comment
@Xerri Похоже, вы, вероятно, хотите опубликовать отдельный новый вопрос об этом - person sideshowbarker; 04.07.2017
comment
Я сделал, но не повезло - person Xerri; 04.07.2017

Вероятно, это не проблема, связанная с firebase. Ваш API должен отправить CORS в заголовке. Либо примите все (*), либо ваше конкретное приложение, размещенное в firebase. Простое исправление для API, написанного на .net. См. ссылку https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/enabling-cross-origin-requests-in-web.-api

person atomek1000    schedule 30.03.2017

Набор заголовков Access-Control-Allow-Origin "*" добавление в файл htaccess сервера решает мою проблему

person Malik Zeeshan    schedule 11.10.2019