Чувствительны ли заголовки HTTP к регистру?
в блоге я использую следующий PHP для установки типа контента ответа:
header('content-type: application/json; charset=utf-8');
Я только что получил комментарий к этому сообщению, говоря, что content-type
должен быть оприходованы, Content-type
. Правильно ли это? Кажется, это работает для меня со всеми строчными буквами, и я предположил, что заголовки HTTP не учитывают регистр. Или это просто работает, потому что браузеры хороши?
5 ответов
имена заголовков не учитывают регистр.
с RFC 2616 - "протокол передачи гипертекста -- HTTP / 1.1", Раздел 4.2, "Заголовки Сообщений":
каждое поле заголовка состоит из имени, за которым следует двоеточие (":") и поле "Значение". Имена полей не учитывают регистр.
обновление RFC 7230 не перечисляет никаких изменения от RFC 2616 в этой части.
имена заголовков HTTP не учитывают регистр, согласно RFC 2616:
4.2:
каждое поле заголовка состоит из имени, за которым следует двоеточие (":") и поле "Значение". Имена полей не учитывают регистр.
(поле значения может или не может быть с учетом регистра.)
если Вы доверяете основным браузерам соблюдать это, вы все настроены.
BTW, в отличие от большинства HTTP, методы (глаголы) are регистр символов:
5.1.1 метод
маркер метода указывает на метод, который будет выполняться на
ресурсы, определенные Запрос URI. Метод чувствительный к регистру.Method = "OPTIONS" ; Section 9.2 | "GET" ; Section 9.3 | "HEAD" ; Section 9.4 | "POST" ; Section 9.5 | "PUT" ; Section 9.6 | "DELETE" ; Section 9.7 | "TRACE" ; Section 9.8 | "CONNECT" ; Section 9.9 | extension-method extension-method = token
tldr; заголовки HTTP/1.1 и HTTP/2 не учитывают регистр.
по данным RFC 7230 (HTTP / 1.1):
каждое поле заголовка состоит из имени поля без учета регистра за ним следует двоеточие ( " :"), необязательные начальные пробелы, поле значение и необязательные конечные пробелы.
https://tools.ietf.org/html/rfc7230#section-3.2
и RFC 7540 (HTTP / 2):
Как и в HTTP / 1.x, имена полей заголовка являются строками ASCII
символы, которые сравниваются без учета регистра.
header('Content-type: image/png')
не работал с PHP 5.5, обслуживающим IE11, так как в потоке изображений был показан текст
header('Content-Type: image/png')
работало, как на изображении появилось изображение
единственная разница-это столица "T".
RFC для HTTP (как указано выше) диктует, что заголовки нечувствительны к регистру, однако вы обнаружите, что с некоторыми браузерами( я смотрю на вас, т. е.), что капитализация каждого из слов имеет тенденцию быть лучшей:
Location: http://stackoverflow.com
Content-Type: text/plain
vs
location: http://stackoverflow.com
content-type: text/plain
это не" HTTP " стандарт, но просто еще один из причуд браузера, мы, как разработчики, должны думать.