Haikson

[ Everything is possible. Everything takes time. ]

Django allowed hosts (settings.ALLOWED_HOSTS)

ALLOWED_HOSTS - это список хостов/доменов, для которых может работать текущий сайт. Это сделано для безопасности, чтобы обезопасить от внедрения в куки или письма для сброса пароля ссылок на сторонний сайт подменив HTTP заголовок Host, что возможно при многих, казалось бы безопасных, конфигурациях сервера. По умолчанию: [] (Пустой список) При DEBUG равном True и при выполнении тестов проверка отключена. Проверка обычно нужна только на боевом сервере.

Возможные значения

Согласно документации переменная ALLOWED_HOSTS может принимать список следующего содержания:
  1. Полное имя домена. Например: "www.example.com" или "example.com". Тогда значение заголовка Host будет сравниваться с этим значением (проверка без учета регистра и порта).
  2. Значение для проверки и поддоменов: ".example.com", удовлетворяет "example.com", "www.example.com" и всем поддоменам "example.com".
  3. Значение "*" принимает все значения, в этом случае вы сами должны проверять заголовок Host (возможно в middleware, при этом укажите его в MIDDLEWARE_CLASSES).
Django также позволяет использовать полное доменное имя (FQDN). Некоторые браузеры добавляют точку в конце заголовка Host, которую Django удаляет перед проверкой хоста. Если заголовок Host (или X-Forwarded-Host при USE_X_FORWARDED_HOST) не совпадает ни с одним значением, метод django.http.HttpRequest.get_host() вызовет исключение SuspiciousOperation. Проверка выполняется только в методе get_host(), если вы используете значение заголовка Host непосредственно из request.META, проверка не будет выполнена.