Google App Engine предотвращает запрос опций между двумя службами - PullRequest
1 голос
/ 15 октября 2019

Я создал проект GAE и развернул две службы:

  1. default (https://myservice.appspot.com) для интерфейсного приложения
  2. backend (https://backend -dot-myservice.appspot.com ) для бэкэнда (Node.js)

Я также добавил собственный домен, чтобы служба по умолчанию была доступна также в https://myservice.com.

Проблема, с которой я сталкиваюсь, заключается в том, что каждому AJAX-запросу, выполняемому браузером, предшествует запрос OPTIONS (для обработки CORS).

Как лучше всего избежать этого запроса OPTIONS? Это должно быть исправлено, если оба front-end / backen-end находятся на одном хосте, но как я могу это сделать в Google App Engine?

Спасибо!

Ответы [ 2 ]

1 голос
/ 16 октября 2019

Я решил добавить файл dispatch.yaml в службу по умолчанию

dispatch:
- url: "*/api/*"
service: backend

, где backend - это мой бэкэнд-сервис. И я изменил свой бэкэнд, чтобы прослушивать адреса вроде /api/something.

Так что теперь браузер имеет происхождение https://myservice.com, а URL-адреса запросов ajax к beckend похожи на https://myservice.com/api/something. Так как теперь клиент и сервер имеют одинаковое происхождение, настройки CORS больше не нужны, и запрос OPTIONS не выполняется браузером.

Я не знаю, является ли онлучшее решение, но для меня это сработало.

0 голосов
/ 15 октября 2019

Как было упомянуто в этом сообщении Stackoverflow :

Запросы OPTIONS - это предварительные запросы при совместном использовании ресурсов общего пользования (CORS) .

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

Ваш сервер не должен игнорировать, а обрабатывать эти запросы всякий раз, когда вы пытаетесь выполнить перекрестные запросы происхождения.


Поддержка CORS для Google App Engine в вашем приложении. Yaml :

Одним из важных применений этой функции являетсядля поддержки совместного использования ресурсов между источниками (CORS), например доступа к файлам, размещенным в другом приложении App Engine.

Например, у вас может быть игровое приложение mygame.appspot.com, которое обращается кактивы, размещенные на myassets.appspot.com. Однако, если mygame попытается сделать JavaScript XMLHttpRequest для myassets, оно не будет выполнено, пока обработчик для myassets не вернет заголовок ответа Access-Control-Allow-Origin:, содержащий значение http://mygame.appspot.com.

handlers:
- url: /images
  static_dir: static/images
  http_headers:
    Access-Control-Allow-Origin: http://mygame.appspot.com

Примечание: если вы хотите разрешить всем доступ к вашим ресурсам, вы можете использовать подстановочный знак '*' вместо http://mygame.appspot.com.

...