Я пытаюсь отправить запрос GET из моего веб-интерфейса в приложение API. Оба работают на моей локальной машине. Вот как это построено прямо сейчас:
backend <===> frontend <=x=> API application
Все три части работают независимо друг от друга в своем собственном док-контейнере и обмениваются данными друг с другом только через HTTP-запросы.
Как показано на верхнем рисунке, соединение между backend
и frontend
работает нормально, но между frontend
и API application
- нет.
Стек состоит из:
frontend
: сервер узла с vue-js и для запросов я использую axios
API application
: Scala с Play Framework 2.5.14
Приложение API само по себе работает, просто найдите, когда я отправлю ей запрос через curl, как это:
curl -X GET api-application.docker/api/user?userId=1 \
-H "Authorization: key" -H "Accept: Application/Json"
Но когда я звоню из внешнего интерфейса, я получаю 404 на вызов OPTIONS. Это также дает мне предупреждение в Firefox, касающееся заголовка CORS Access-Control-Allow-Origin
:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the
remote resource at http://api-application.docker:9000/api/user?userId=1
(Reason: CORS header ‘Access-Control-Allow-Origin’ missing).
Поэтому я сначала зашел в приложение API application.conf
и добавил
play.filters.cors {
allowedOrigins = ["*"]
}
Я также пытался обменять звездочку на http://frontend.docker:8080
Это не сработало, поэтому я снова удалил эту запись и добавил следующую строку:
play.filters.disabled += "play.filters.cors.CORSFilter"
Все еще без изменений. Теперь мне интересно, неправильно ли я понял связь между OPTIONS и CORS? Или я его неправильно выключил? Кто-нибудь может мне помочь?
EDIT:
Еще кое-что, что я пробовал, ожидая ответов, но все безуспешно:
Я изменил запись в application.conf
на:
play.filters.cors {
allowedOrigins = null
}