Я борюсь с настройками django -cors-headers для своей среды разработки. Я запрашиваю API django из клиентского приложения React, используя axios
с withCredentials
, установленным на true
. Использование withCredentials
подразумевает, что заголовок ответа Access-Control-Allow-Origin
не может быть установлен на *
. И вот странная вещь: в моем settings.py
у меня есть:
CORS_ORIGIN_ALLOW_ALL = False # should be useless while a whitelist is set, but still...
CORS_ORIGIN_WHITELIST = ['http://localhost:3000']
Я могу проверить, что значение Access-Control-Allow-Origin
действительно http://localhost:3000
, если я напишу простое промежуточное ПО и напечатаю заголовок:
class LocalSettingsMiddleware(MiddlewareMixin):
def process_response(self, request, response):
print(response['Access-Control-Allow-Origin'])
return response
>>> Django version 3.0.5, using settings 'mydjangoapp.settings'
>>> Starting development server at http://127.0.0.1:8000/
>>> Quit the server with CONTROL-C.
>>> http://localhost:3000
>>> [10/Apr/2020 19:54:02] "OPTIONS /authent/token/obtain/ HTTP/1.1" 200 0
Но на стороне клиента предварительный запрос не выполняется, и я получаю следующую ошибку CORS:
The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'.
На рабочем сервере все работает нормально, кажется, что проблема происходят только когда localhost
установлен в белом списке cors.