Заголовок CORS по запросу OPTIONS?

Я пытаюсь настроить веб-приложение с помощью Angular и Django, но у меня проблема с заголовками CORS.

Насколько я понимаю, чтобы включить в запрос данные cookie из внешнего интерфейса (например, токен csrf и идентификатор сеанса), мне нужно установить для параметра withCredentials значение true в запросе. Итак, GET-запрос выглядит как this.http.get(this.url, { withCredentials: true });. Затем браузер говорит

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at xxx. (Reason: expected ‘true’ in CORS header ‘Access-Control-Allow-Credentials’).

Я могу исправить это для запроса GET, добавив заголовок к ответу с помощью response["Access-Control-Allow-Credentials"] = "true", но проблема возникает, когда я делаю запрос POST. В этом случае интерфейс автоматически отправляет запрос OPTIONS перед POST, который, насколько я понимаю, является стандартным и используется для проверки того, что серверная часть позволяет публиковать. Однако я не могу установить заголовок CORS для ответа на запрос OPTIONS, поэтому я фактически не могу отправить запрос POST.

Есть ли способ установить заголовок для ответов OPTIONS или я вообще что-то делаю не так?

Почему нельзя задать заголовок в настройках? Вы также можете использовать пакет corsheaders для регулирования политики CORS.

willeM_ Van Onsem 07.08.2024 09:23

Ну, похоже, что запрос параметров вообще не отправляется в представление, где мне установить заголовок?

bp-pet 07.08.2024 09:38

установите заголовок corseheader в INSTALLED_APP и сделайте его TRUE, а также добавьте промежуточное программное обеспечение, дополнительную информацию читайте в этом документе, pypi.org/project/django-cors-headers

Tanveer 07.08.2024 09:41

Спасибо, у меня это уже было, но не было CORS_ALLOW_CREDENTIALS

bp-pet 07.08.2024 10:36
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Да, есть способ установить заголовок для ответов OPTIONS.

  1. Установите django-cors-headers (если еще не установлен):

Вы можете сделать это, запустив:

pip install django-cors-headers
  1. Настройте заголовки django-cors:

Затем добавьте corsheaders к установленным приложениям и промежуточному ПО в файле settings.py:

INSTALLED_APPS = [
    ...
    'corsheaders',
    ...
]

MIDDLEWARE = [
    ...
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    ...
]

CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = True

Итак, если вы выполните описанные выше шаги, ваш бэкэнд Django будет правильно реагировать на запросы OPTIONS и устанавливать правильные заголовки CORS, поэтому ваше угловое приложение сможет выполнять запросы POST, не сталкиваясь с проблемами CORS.

Мне не хватало только разрешения CORS_ALLOW_CREDENTIALS, теперь оно работает!

bp-pet 07.08.2024 10:35

Другие вопросы по теме