Django CSRF_TRUSTED_ORIGINS и http/2
Подозреваю, что сайты, использующие протокол http/2, не отправляют заголовок Host
в запросах, например, переходя на /admin/
Это приводит к тому, что Django жалуется на Origin checking failed - does not match any trusted origins)
, хотя постинг осуществляется в точно такой же домен.
Эта ошибка не появляется на сайтах, использующих протокол http/1 на Django 4.2
Кроме добавления фактического домена в CSRF_TRUSTED_ORIGINS
, есть ли что-нибудь еще, что я могу сделать?
Вы должны добавить SECURE_PROXY_SSL_HEADER в настройки Django:
CSRF_COOKIE_SECURE = True
CSRF_COOKIE_HTTPONLY = True
CSRF_TRUSTED_ORIGINS=['https://example.com']
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
USE_X_FORWARDED_HOST = True
Дополнительно установите заголовок прокси в конфигурации сервера Nginx:
proxy_set_header X-Forwarded-Proto $scheme;