Пользовательские заголовки HTTP: соглашения об именах
некоторые из наших пользователей попросили нас включить данные относительно их счета в HTTP-заголовки запросов, которые мы им отправляем, или даже ответов, которые они получают от нашего API.
Каково общее Соглашение для добавления пользовательских заголовков HTTP, с точки зрения наименования,формат... так далее.
кроме того, не стесняйтесь публиковать любое умное использование этих, на которые вы наткнулись в интернете; мы пытаемся реализовать это, используя то, что лучше всего там в качестве цели :)
6 ответов:
в июне 2012 года отказ от рекомендации использовать префикс "X -" стал официальным как RFC 6648. Ниже приведены ссылки на актуальность:
3. Рекомендации для создателей новых параметров
...
- не следует ставить перед именами параметров префикс "X -" или аналогичный строит.
4. Рекомендации для разработчиков протоколов
...
не следует запрещать параметры с префиксом "X -" или аналогичные конструкции от регистрации.
не следует указывать, что параметр с префиксом "X -" или подобные конструкции необходимо понимать как нестандартизированные.
не должен оговаривать, что параметр без префикса "X -" или подобные конструкции должны пониматься как стандартизированные.
обратите внимание, что "не следует" ("обескуражено") не то же самое, что"не должно" ("запрещено"), см. Также RFC 2119 для другой спецификации по этим ключевым словам. Другими словами, вы можете продолжать использовать заголовки с префиксами "X -", но это не рекомендуется, и вы не можете документировать их, как если бы они были общедоступными стандартами.
в июне 2011 года, первый проект IETF был направлен в deprecate рекомендация использования префикса "X -" для нестандартные заголовки. Причина в том, что когда нестандартные заголовки с префиксом "X-" становятся стандартными, удаление префикса "X -" нарушает обратную совместимость, заставляя протоколы приложений поддерживать оба имени (например,
x-gzip&gzipсейчас эквивалент). Итак, рекомендация состоит в том, чтобы просто назвать их умом без префикса " X -".
рекомендации
ибыл чтобы начать свое имя с " X -". Например.X-Forwarded-For,X-Requested-With. Это также упоминается в разделе a. o. 5 RFC 2047.
вопрос стоит перечитывать. Фактически заданный вопрос не похож на префиксы поставщиков в свойствах CSS, где уместна будущая проверка и размышление о поддержке поставщиков и официальных стандартах. Фактически заданный вопрос больше похож на выбор имен параметров URL-запроса. Никого не должно волновать, кто они такие. Но интервал между именами пользовательские из них-это совершенно допустимая-и обычная, и правильная-вещь.
обоснование:
Речь идет о соглашения между разработчиками для пользовательских, специфичных для приложения заголовков--"данные, относящиеся к их учетной записи" -- которые не имеют ничего общего с продавцами, органами по стандартизации, или протоколы должны быть реализованы третьими лицами, за исключением того, что разработчик просто должен избегать заголовков, которые могут иметь другое целевое использование серверами, прокси и клиентов. По этой причине, "х-с помощью gzip/gzip" и "Х-переадресовано-для/переданы на" приведенные примеры являются сугубо теоретическими. Вопрос речь идет о соглашениях в контексте частного API, сродни соглашениям об именовании параметров URL-запроса. Это вопрос предпочтения и интервала между именами; опасения по поводу того, что "X-ClientDataFoo" поддерживается любым прокси или поставщиком без "X", явно неуместны.в префиксе "X-" нет ничего особенного или волшебного, но это помогает понять, что это пользовательский заголовок. На самом деле, RFC-6648 и др. помогают укрепить дело для использования префикса " X -", потому что -- как поставщики HTTP-клиенты и серверы отказываются от префикса-ваш специфичный для приложения, частный API, механизм передачи персональных данных становится еще более изолированным от конфликтов пространства имен с небольшим количеством официальных зарезервированных имен заголовков. Тем не менее, мои личные предпочтения и рекомендации-сделать шаг вперед и сделать, например, "X-ACME-ClientDataFoo" (если ваша компания виджетов "ACME").
IMHO спецификация IETF недостаточно конкретна, чтобы ответить на вопрос OP, потому что она не может различают совершенно разные варианты использования: (A) поставщики, вводящие новые глобально применимые функции, такие как "переадресованные", с одной стороны, и (B) разработчики приложений, передающие строки приложения клиенту и серверу. Спецификация касается только первого, (A). Вопрос здесь заключается в том, существуют ли соглашения для (B). Есть. Они включают группировку параметров в алфавитном порядке и их отделение от многих стандартных заголовков типа (A). С помощью Префикс" X - "или" X-ACME - " удобен и законен для (B) и не противоречит (A). Чем больше поставщиков перестанут использовать "X-" для (A), тем более четко различимыми станут (B).
пример:
Google (которые несут немного веса в различных органах стандартов)-на сегодняшний день, 20141102 в этом небольшом редактировании моего ответа-в настоящее время использует "X-Mod-Pagespeed", чтобы указать версию своего модуля Apache, участвующего в преобразовании данного ответа. Есть кто-нибудь действительно предлагает Google использовать "Mod-Pagespeed", без "X -" и/или попросить IETF благословить его использование?резюме:
Если вы используете пользовательские заголовки HTTP (как иногда подходящую альтернативу cookies) в своем приложении для передачи данных на / с вашего сервера, и эти заголовки явно не предназначены для использования вне контекста вашего приложения, интервал между именами с префиксом" X - "или" X-FOO - " является разумным и распространенным, конвенция.
формат HTTP-заголовков, определенных в спецификации протокола HTTP. Я собираюсь поговорить о HTTP 1.1, для которого спецификация RFC 2616. В разделе 4.2, 'заголовки сообщений', определяется общая структура заголовка:
message-header = field-name ":" [ field-value ] field-name = token field-value = *( field-content | LWS ) field-content = <the OCTETs making up the field-value and consisting of either *TEXT or combinations of token, separators, and quoted-string>это определение опирается на два основных столпа, маркер и текст. Оба они определены в разделе 2.2 "Основные правила". Токен:
token = 1*<any CHAR except CTLs or separators>в свою очередь, опираясь на CHAR, CTL и сепараторы:
CHAR = <any US-ASCII character (octets 0 - 127)> CTL = <any US-ASCII control character (octets 0 - 31) and DEL (127)> separators = "(" | ")" | "<" | ">" | "@" | "," | ";" | ":" | "\" | <"> | "/" | "[" | "]" | "?" | "=" | "{" | "}" | SP | HTтекст это:
TEXT = <any OCTET except CTLs, but including LWS>где LWS-линейное пустое пространство, определение которого я не буду воспроизводить, а октет:
OCTET = <any 8-bit sequence of data>к определению прилагается Примечание:
The TEXT rule is only used for descriptive field contents and values that are not intended to be interpreted by the message parser. Words of *TEXT MAY contain characters from character sets other than ISO- 8859-1 [22] only when encoded according to the rules of RFC 2047 [14].Итак, два вывода. Во-первых, понятно, что заголовок имя должен состоять из подмножества символов ASCII - букв, цифр, некоторых знаков препинания, а не много другое. Во-вторых, нет ничего в определении заголовок стоимостью это ограничивает его ASCII или исключает 8-разрядные символы: он явно состоит из октетов, причем только управляющие символы запрещены (обратите внимание, что CR и LF считаются элементами управления). Кроме того, комментарий к текстовому производству подразумевает, что октеты должны интерпретироваться как находящиеся в ISO-8859-1, и что существует механизм кодирования (что, кстати, ужасно) для представления символов вне этой кодировки.
Итак, чтобы ответить на @BalusC в частности, совершенно ясно, что согласно спецификация, значения заголовка находятся в ISO-8859-1. Я отправил-8859-1 символы (в частности, некоторые ударением гласных, как используется на французском языке) в заголовке из Tomcat и их интерпретировать правильно в Firefox, так что в какой-то степени это работает на практике, а также в теории (хотя это было расположение заголовка, который содержит URL-адрес, и эти персонажи не являются юридическими в URL, так что это было на самом деле незаконно, но в соответствии с другим правилом!).
тем не менее, я бы не стал полагаться на ISO-8859-1 работа на всех серверах, прокси и клиентах, поэтому я бы придерживался ASCII в качестве защитного программирования.
имя поля заголовка реестра определяется в RFC3864 и нет ничего особенного с "X-".
насколько я могу судить, нет никаких рекомендаций для частных заголовков; в сомнении, избегайте их. Или посмотрите на структуру расширения HTTP (RFC 2774).
было бы интересно понять больше вариантов использования; почему информация не может быть добавлена в тело сообщения?
изменение, или, точнее, добавлять дополнительные заголовки HTTP является отличным инструментом отладки кода, если ничего другого.
когда URL-запрос возвращает перенаправление или изображение, нет html - страницы, чтобы временно записать результаты кода отладки-по крайней мере, не тот, который виден в браузере.
один из подходов заключается в записи данных в локальный файл журнала и просмотр этого файла позже. Другой-временно добавить заголовки HTTP, отражающие данные и переменные отлаживается.
Я регулярно добавляю дополнительные заголовки HTTP, такие как X-fubar-somevar: или X-testing-someresult: чтобы проверить все - и нашли много ошибок, которые в противном случае было бы очень трудно отследить.
RFC6648 рекомендуется предположить, что ваш пользовательский заголовок "может стать стандартизированным, общедоступным, обычно развернутым или пригодным для использования в нескольких реализациях."Поэтому он рекомендует не префиксировать его "X -" или подобными конструкциями.
однако есть исключение ", когда крайне маловероятно, что [ваш заголовок] когда-либо будет стандартизирован."Для таких заголовков, специфичных для реализации и частного использования, RFC говорит, что пространство имен, такое как префикс поставщика оправданный.
Comments