Имеет ли значение регистр в HTTP-заголовке?

«Имеет ли значение регистр в HTTP-заголовке?» — вопрос из категории Сети, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Согласно спецификации HTTP/1.1 (RFC 7230), имена заголовков — case-insensitive. Это означает, что Content-Type, content-type и CONTENT-TYPE технически эквивалентны.

Однако на практике существуют важные нюансы и best practices:

  1. Стандартизация для читаемости: Исторически сложилось и рекомендуется использовать Pascal-Case (первая буква каждого слова заглавная). Это стиль, используемый в самой RFC и большинстве документаций.

    • Правильно: Content-Type, Accept-Encoding, User-Agent
    • Нежелательно: content-type, ACCEPT-ENCODING
  2. Регистр в значениях заголовков: Для значений заголовков регистр может иметь значение в зависимости от конкретного заголовка.

    • Content-Type: application/json (стандартный регистр)
    • Content-Type: APPLICATION/JSON (может работать, но нестандартно)
  3. Проблемы совместимости: Подавляющее большинство серверов, клиентов и библиотек корректно обрабатывают любой регистр имён. Однако некоторые устаревшие или некорректно реализованные парсеры могут с этим спотыкаться.

Вывод и рекомендация: Всегда придерживайтесь стиля Pascal-Case для имён HTTP-заголовков. Это гарантирует максимальную совместимость, соответствует стандартам де-факто и делает код более читаемым и профессиональным.