Как отправить непустой заголовок Origin в POST-запросе, если приложение запущено на localhost?
Я только что обновился до Django 4, и он включает билет 16010 с изменениями проверки происхождения .
Насколько мне известно, если вы запускаете приложение на localhost, браузеры не будут отправлять origin (они будут отправлять null). Поэтому, всякий раз, когда мы запускаем приложение Django на localhost, мы должны ожидать заголовок Origin: null
в POST запросах.
Но с недавним изменением CSRF на localhost не может быть проверен из-за другого изменения - CSRF_TRUSTED_ORIGINS
теперь необходимо иметь схему. release notes
Можно ли добавить непустой заголовок Origin
при POSTing с localhost?
Чтобы было понятно, это не сработает
from corsheaders.defaults import default_headers
CORS_ALLOW_HEADERS = default_headers + ('Access-Control-Allow-*',)
CORS_ALLOWED_ORIGINS = [
"http://localhost:8000",
"http://127.0.0.1:8000",
]
CSRF_TRUSTED_ORIGINS = [
"http://localhost:8000",
"http://127.0.0.1:8000",
]
<form method="post">
{% csrf_token %}
</form>
Origin checking failed - null does not match any trusted origins.
Заголовки запроса
Host: localhost:8000
Origin: null
Origin
будет null
во многих различных случаях. Моя проблема заключалась в том, что у меня было
<meta name="referrer" content="no-referrer">
в базовом шаблоне.