РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
501 of 818 menu

BadHeaderError

Исключение BadHeaderError выбрасывается в Django, когда происходит попытка установить заголовок HTTP-ответа, содержащий недопустимые символы или пустое имя. Это исключение является подклассом ValueError и используется для обеспечения безопасности заголовков, передаваемых клиенту. Проверка выполняется в момент присвоения заголовка объекту ответа, что предотвращает потенциальные атаки через подмену заголовков.

Исключение автоматически поднимается методами __setitem__ и setdefault класса HttpResponse, а также при прямом присвоении значения заголовку через словарный синтаксис. Валидация проверяет, что имя заголовка содержит только буквы, цифры, дефисы и подчеркивания, а также не является пустой строкой. Кроме того, Django запрещает использование заголовков, начинающихся с '_' и '-', чтобы избежать конфликтов с внутренними заголовками сервера.

Синтаксис

from django.http import HttpResponse, BadHeaderError response = HttpResponse() try: response['Header-Name'] = 'Header Value' except BadHeaderError: # Handle invalid header pass

Пример

Попробуем установить заголовок с недопустимым символом в имени, например, пробелом:

from django.http import HttpResponse, BadHeaderError response = HttpResponse('Hello, World!') try: response['Invalid Header Name'] = 'Some Value' except BadHeaderError as error: print(f'Caught exception: {error}') print(response.headers)

Результат выполнения кода:

"Caught exception: HTTP header name 'Invalid Header Name' is invalid" {}

Как видно из примера, заголовок не был добавлен, и было выброшено исключение с информативным сообщением о недопустимом имени.

Пример

Попробуем установить заголовок с пустым именем, что также вызовет ошибку:

from django.http import HttpResponse, BadHeaderError response = HttpResponse() try: response[''] = 'Some Value' except BadHeaderError as error: print(f'Caught exception: {error}')

Результат выполнения кода:

"Caught exception: HTTP header name '' is invalid"

Пример

Корректный способ установки заголовков с использованием метода set_header, который также может выбрасывать исключение при недопустимых значениях:

from django.http import HttpResponse, BadHeaderError response = HttpResponse() try: response.set_header('Content-Type', 'text/html; charset=utf-8') response['Cache-Control'] = 'max-age=3600' response.setdefault('X-Frame-Options', 'DENY') print('Headers set successfully') except BadHeaderError as error: print(f'Caught exception: {error}') print(response.headers)

Результат выполнения кода:

"Headers set successfully" {'Content-Type': 'text/html; charset=utf-8', 'Cache-Control': 'max-age=3600', 'X-Frame-Options': 'DENY'}

В этом примере все заголовки установлены корректно, и исключение не возникло.

Пример

Попробуем установить заголовок, начинающийся с запрещённого символа подчёркивания:

from django.http import HttpResponse, BadHeaderError response = HttpResponse() try: response['_Hidden-Header'] = 'Secret Value' except BadHeaderError as error: print(f'Caught exception: {error}')

Результат выполнения кода:

"Caught exception: HTTP header name '_Hidden-Header' is invalid"

Смотрите также

  • исключение Http404,
    которое выбрасывается при недоступности страницы
  • исключение BadRequest,
    которое возникает при некорректном запросе клиента
  • исключение ImproperlyConfigured,
    которое сигнализирует о неправильной настройке приложения
  • исключение ValidationError,
    которое возникает при ошибках валидации данных
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить