REACT + DJANGO - CORS-ошибки после входа - отсутствует CORS-заголовок 'Access-Control-Allow-Origin'
У нас есть приложение React + Django на экземплярах GCP App Engine, и мы сталкиваемся с ошибкой CORS при получении данных через наш REST API.
Мы уже установили и настроили пакет CORS для Django Rest Framework в нашем django-приложении:
`
ALLOWED_HOSTS = [
'xxxxxxxxxxxx.appspot.com',
'yyyyyyyyyyyy.appspot.com',
]
CORS_ALLOWED_ORIGINS=[
'http://localhost:3000',
'https://xxxxxxxxxxxx.appspot.com',
'https://yyyyyyyyyyyy.appspot.com',
]
CORS_ALLOW_CREDENTIALS=True
`
Запрос preflight успешен, также как и вход в приложение, которое выполняет async-запрос к нашему бэкенду:
access-control-allow-origin: https://xxxxxxxxxxxxxxxxxxxxx.appspot.com
access-control-allow-headers: accept, accept-encoding, authorization, content-type, dnt, origin, user-agent, x-csrftoken, x-requested-with
access-control-allow-methods: DELETE, GET, OPTIONS, PATCH, POST, PUT
access-control-max-age: 86400
Правильный URL передается через заголовок allow-origins. Затем фактический GET-запрос блокируется с кодом ответа 400 от браузера и следующим сообщением об ошибке:
Cross-Origin Request Blocked: Политика одинакового происхождения запрещает чтение удаленного ресурса по адресу https://xxxxxx.appspot.com/api/entities?page_size=10. (Причина: отсутствует CORS-заголовок 'Access-Control-Allow-Origin'). Код состояния: 400.
Самое странное, что мы можем войти в приложение, и это использует асинхронный запрос к тому же домену, только после того, как мы вошли, появляется эта ошибка.
Мы просмотрели несколько страниц stackoverflow и различные конфигурации (например, использование Regex в конфигурации allow ORIGINS), но ничего не помогает, приложение всегда возвращает ошибку CORS.
У кого-нибудь есть идеи о том, что здесь может происходить?
После некоторой отладки мы поняли, что ошибка CORS на самом деле маскировала другую проблему, связанную с размером cookies, который превышал допустимый лимит сервера.
Единственным способом просмотреть эту ошибку был переход на вкладку сети и предварительный просмотр данных ответа в Firefox, в Edge ответ был пустым, и мы не смогли понять реальную проблему.