Django Cors Allow Access-Control-Allow-Headers

Я пытаюсь сделать простой API с помощью Django. Я настроил сервер django, а затем на своем собственном html-файле отправляю запросы, используя $.getJSON. До сих пор все работало с использованием пакета django cors headers package.

Теперь я пытаюсь отправить заголовок запроса на мой сервер django, но я получаю эту ошибку в консоли Chrome:

Access to XMLHttpRequest at 'http://127.0.0.1:8000/api/?q=example+query' from origin 'http://localhost:63342' has been blocked by CORS policy: Request header field Example-Header is not allowed by Access-Control-Allow-Headers in preflight response.

Я не уверен, в чем проблема, у меня правильно настроен django-cors и я могу делать запросы, мне просто не разрешено устанавливать заголовки запросов.

Установка:

INSTALLED_APPS = [
    ...
    'corsheaders',
]
MIDDLEWARE = [
    ...
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    ...
]
CORS_ALLOWED_ORIGINS = [
    "http://localhost:63342"
]
<script>
   $.ajaxSetup({
      beforeSend: function(request) {
         request.setRequestHeader("Example-Header", 'Example-Value');
      },
   });
   $.getJSON("http://127.0.0.1:8000/api/?q=example+query", function (data) {
      console.log(data);
   });
</script>
@cache_page(60 * 60 * 24 * 7)
def ExampleAPI(request):
    if request.method == 'GET':
       print(request.headers['Example-Header']) # Print Header Value 
       print(request.GET.get('q')) # Print URL Query Parameter Value   
       return JsonResponse([{"Example-Response": "Example-Response-Value"}], safe=False) 

Так что же я делаю не так? Неужели django-cors не поддерживает это? Я пытался читать документацию, но ничего не смог найти. Спасибо.

Из документации по django-cors-headers на PyPI похоже, что вам нужно установить CORS_ALLOW_HEADERS следующим образом:

CORS_ALLOW_HEADERS = [
    ...
    "Example-Header",
    ...
]

https://pypi.org/project/django-cors-headers/

Если вы хотите глубже погрузиться в CORS, вот подробная документация: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

Для меня CORS_ALLOW_HEADERS не сработал.

после нескольких попыток я обнаружил, что CORS_EXPOSE_HEADERS будет работать.

CORS_EXPOSE_HEADERS = [
    "my-custom-header",
]

это означает, что теперь я могу установить 'my-custom-header' (с его значением) в заголовке ответа.

Вернуться на верх