Движок приложения, отсутствует заголовок Cors_Allowed_Origins сервера Flask-Socketio

#python #google-app-engine #flask #socket.io #flask-socketio

# #python #google-app-engine #flask #socket.io #flask-socketio

Вопрос:

Когда я пытаюсь отправить запрос от клиента на мой сервер socketio flask, который развернут на app Engine, я получаю следующую ошибку:

был заблокирован политикой CORS: заголовок ‘Access-Control-Allow-Origin’ отсутствует на запрошенном ресурсе.

Я поместил следующую строку в свой скрипт сервера python:

 socketio = SocketIO(app, cors_allowed_origins='*')
 

Я также добавил следующую строку:

 CORS(app)
 

Что я делаю не так?

Я попытался изменить app.yaml с помощью Allow_cors_origin обработчика URL, установив пакет flask-cors, ничего не сработало

РЕДАКТИРОВАТЬ: я обнаружил в движке приложений следующее сообщение во время отладки:

{ «textPayload»: «Клиент использует неподдерживаемую версию сокета.Ввод-вывод или движок.Протоколы ввода-вывода (дальнейшие случаи этой ошибки будут регистрироваться с информацией об уровне)», «insertId»: «5fca5af900064b8faf6f9267», «resource»: { «type»: «gae_app», «labels»: { «module_id»: «default», «project_id»: «island-battles», «version_id»: «20201204t174848», «zone»: «europe-west6-3» } }, «timestamp»: «2020-12-04T15:51:21.412559Z», «labels»: { «clone_id»: » 00c61b117cf0689fb08fabba9037f4624c77b480da8e9472be2b02038e0fe7d2d8dcac81021c» }, «logName»: «проекты/остров-battles / logs /stderr», «receiveTimestamp»: «2020-12-04T15:51:21.465294012Z» }

Как мне это исправить? Спасибо

ВТОРОЕ РЕДАКТИРОВАНИЕ: в моей локальной версии все работает нормально, проблема связана с app engine

Комментарии:

1. Это может помочь

2. добавьте это в свой файл yaml Access-Control-Allow-Origin: https://your_deployed_website.com

3. @GuneshShanbhag, моя игра кроссплатформенная, поэтому это не только один URL

4. @GuneshShanbhag кроме того, я попытался написать в файле app.yaml то, что сказано в документах, у меня не сработало. Мне нужны запросы для работы с основным файлом, а не со статическими файлами

5. Пройдите через это тоже

Ответ №1:

Если вы используете Flask-SocketIO, убедитесь, что установлена совместимая версия, последняя не совместима с python-socketio 3.1.2, и вы получите сообщение об ошибке.

Я побежал:

 pip install python-socketio==3.1.2 
 

как было предложено Оливером, но возникла ошибка, потому что у меня была версия Flask-SocketIO 5.0.1, поэтому я выполнил следующее:

 pip install flask-socketio==4.3.2
 

и это решило мои проблемы.

В конечном итоге вам понадобится flask-socketio-4.3.2 python-engineerio-3.14.2 python-socketio-4.6.1

Аналогичный вывод сделан здесь: https://github.com/miguelgrinberg/Flask-SocketIO/issues/1432
https://github.com/juharris/switch-remoteplay/issues/37

Ответ №2:

Эта ошибка связана с неподдерживаемой версией ввода-вывода сокета. Я полагаю, вы используете последнюю версию, однако движку приложений обычно требуется некоторое время для поддержки последних версий. Попробуйте понизить его до версии v3.x, возможно, даже до версии v2.x.

Вы можете установить определенные версии пакетов с $ pip install <PACKAGE>==<VERSION> помощью, в данном случае, например: $ pip install python-socketio==3.1.2 .