Django / React Cross-Origin Request Blocked Ошибка размещена Google App Engine django -cors-headers не работает - PullRequest
0 голосов
/ 27 февраля 2020

Бэкенд приложения (django) и веб-интерфейс (реакция) размещаются в облаке Google в одном приложении. Я установил django -cors-headers и сослался на него в settings.py:

INSTALLED_APPS = (
    ...
    'corsheaders',
    ...
)

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    ...
]

CORS_ORIGIN_ALLOW_ALL = True

CORS_ORIGIN_REGEX_WHITELIST = (
    'http://localhost:3000',
    'https?\://myapp\.appspot\.com\/?',
    'https?\://frontend-dot-myapp\.appspot\.com\/?',
)

Насколько я понял, CORS_ORIGIN_ALLOW_ALL уже должен решить эту проблему, но это не так, я только что получил немного отчаянно там пробовать вещи. CORS_ORIGIN_WHITELIST не работает для меня, поэтому CORS_ORIGIN_REGEX_WHITELIST.

Я ничего не изменил в этой настройке, но теперь появляется ошибка Cross-Origin. С момента последнего изменения кода я установил django -silk для профилирования приложения. Удаление, похоже, не решает проблему, поэтому я не уверен, имеет ли она отношение.

Помощь очень ценится!

в require.txt: django-cors-headers==3.2.1

EDIT

После большого количества проб и ошибок я обнаружил, что добавление последних двух строк в urls.py вызывает проблему:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', views.api_root),
    path('_ah/warmup/', views.service_status),
    path('_ah/start/', views.service_status),
    ...

Однако я не понимаю, почему это вызывает CORS Ошибка или как ее исправить.

1 Ответ

0 голосов
/ 28 февраля 2020

Эта идея может стоить того. Попробуйте переместить строку 'corsheaders.middleware.CorsMiddleware' в верхнюю часть раздела MIDDLEWARE.

Это рекомендуется в документации pypi django -cors-headers , где говорится "CorsMiddleware должен быть располагаться как можно выше, особенно перед любым промежуточным программным обеспечением, которое может генерировать ответы, например CommonMiddleware от Django или WhiteNoiseMiddleware от Whitenoise. Если этого не произойдет, он не сможет добавить заголовки CORS к этим ответам. "

...