HTTP/1.1, протокол передачи гипертекста
2 Письменные соглашения и обобщенная грамматика.
2.1 Увеличенная нормальная запись Бекуса-Наура (BNF).
Все механизмы, определенные этим документом, описаны как в обычной, так и в увеличенной нормальной записи Бекуса-Наура (BNF), подобной используемой в RFC 822 [9]. Разработчик должен быть знаком с такой формой записи, чтобы понять данную спецификацию. Увеличенная нормальная запись Бекуса-Наура включает следующие конструкции:
- 
   имя = определение
 name = definition
- Имя правила - это просто его название (не включающее символов "<" и ">"), и отделяемое от определения символом равенства "=". Пробел важен только при выравнивании продолжающихся строк, используемых для указания определений правил, которые занимают более одной строки. Некоторые основные правила, такие как SP, LWS, HT, CRLF, DIGIT, ALPHA и т.д, представлены в верхнем регистре. Угловые скобки используются в определении всякий раз, когда их присутствие облегчает использование имен правил.
- 
   "литерал"
 "literal"
- Кавычки окружают литеральный текст. Если не установлено иного, этот текст регистро-независим.
- 
   правило1 | правило2
 rule1 | rule2
- Элементы, отделяемые полосой ("|") являются вариантами. Например, "да | нет" принимает значение либо да, либо нет.
- 
   (правило1 правило2)
 (rule1 rule2)
- Элементы, включенные в круглые скобки обрабатываются как один элемент. Таким образом, "(elem (foo | bar) elem)" допускает последовательности лексем "elem foo elem" и "elem bar elem".
- 
   *правило
 *rule
- Символ "*", предшествующий элементу, указывает повторение. Полная форма - "<n>*<m>element" означает минимум <n>, максимум <m> вхождений элемента. Значения по умолчанию - 0 и бесконечность. Таким образом запись "*(element)" допускает любое число повторений (в том числе ноль); запись "1*element" требует по крайней мере одно повторение; а "1*2element" допускает либо один, либо два повторения.
- 
   [правило]
 [rule]
- В квадратные скобки заключают опциональные элементы; "[foo bar]" эквивалентно "*1(foo bar)".
- 
   N правило
 N rule
- Точное количество повторений: "<n>(element)" эквивалентно "<n>*<n>(element)"; то есть присутствует точно <n> повторов элемента. Таким образом 2DIGIT - номер из 2 цифр, а 3ALPHA - строка из трех алфавитных символов.
- 
   #правило
 #rule
- Конструкция "#" предназначена, подобно "*", для определения списка элементов. Полная форма - "<n>#<m>element" означает минимум <n>, максимум <m> вхождений элемента, отделенных одной или несколькими запятыми (","), и, возможно, линейным пробелом (LWS). Это обычно делает форму списков очень простой; правило типа "( *LWS element *( *LWS "," *LWS element)) " можно представить как "1#элемент". Везде, где используется эта конструкция, пустые элементы допускаются, но не учитываются при подсчете представленных элементов. То есть конструкция "(element), , (element)" допускается, но считаются в ней только два элемента. Следовательно там, где требуется по крайней мере один элемент, должен присутствовать по крайней мере один не пустой элемент. Значения по умолчанию - 0 и бесконечность. Таким образом запись "#(element)" допускает любое число повторений (в том числе ноль); запись "1#element" требует по крайней мере одного повтора ненулевого элемента; а "1*2element" допускает один или два повтора.
- 
   ; комментарий
 ; comment
- Точка с запятой, поставленная справа от текста правила, начинает комментарий, который продолжается до конца строки. Это - простой способ включения полезных пометок параллельно спецификациям.
- 
   подразумевая *LWS
 implied *LWS
- Грамматика, описанная этой спецификацией основана на словах. За исключением случаев, в которых отмечено иное, линейный пробел (LWS) может быть включен между любыми двумя смежными словами (лексемой или строкой цитирования), и между смежными лексемами и разделителями (tspecials), не изменяя интерпретацию поля. Между любыми двумя лексемами должен существовать по крайней мере один разделитель (tspecials), так как иначе они интерпретируются как одна лексема.
Следующие правила используются в продолжение всей этой спецификации для описания основных конструкций синтаксического анализа. Кодированный набор символов US-ASCII определен в ANSI X3.4-1986 .
          OCTET          = <любая 8-битная последовательность данных>
          CHAR           = <любой US-ASCII символ (октеты 0 - 127)>
          UPALPHA        = <любой US-ASCII символ верхнего регистра
                            "A".."Z">
          LOALPHA        = <любой US-ASCII символ нижнего регистра
                            "a".."z">
          ALPHA          = UPALPHA | LOALPHA
          DIGIT          = <любая US-ASCII цифра "0".."9">
          CTL            = <любой US-ASCII управляющий символ (октеты
                           0 - 31) и DEL (127)>
          CR             = <US-ASCII CR, возврат каретки (13)>
          LF             = <US-ASCII LF, перевод строки (10)>
          SP             = <US-ASCII SP, пробел (32)>
          HT             = <US-ASCII HT, метка горизонтальной
                            табуляции (9)>
          <">            = <US-ASCII двойные кавычки (34)>
HTTP/1.1 определяет последовательность CR LF как метку конца строки во всех элементах протокола, за исключением тела объекта (смотрите приложение 19.3 о допустимых применениях (tolerant applications)). Метка конца строки внутри тела объекта определяется соответствыющим медиа типом, как описано в разделе 3.7.
          CRLF           = CR LF
HTTP/1.1 заголовки занимают несколько строк, если следующая строка начинается с пробела или метки горизонтальной табуляции. Все незаполненное пространство строки, включая переход на следующую строку, имеет ту же семантику, что и SP.
          LWS            = [CRLF] 1*( SP | HT )
Правило TEXT используется только для описательного содержимого поля и значений, которые не предназначены, для интерпретации синтаксическим анализатором сообщений. Слова *TEXT могут содержать символы из наборов символов (character sets), отличных от ISO 8859-1 , только когда они закодированы согласно правилам RFC 1522 .
          TEXT           = <любой OCTET, за исключением CTLs,
                            но содержащий LWS>
Шестнадцатеричные цифры используются некоторыми элементами протокола.
          HEX            = "A" | "B" | "C" | "D" | "E" | "F"
                         | "a" | "b" | "c" | "d" | "e" | "f" | DIGIT
Многие значения полей заголовка HTTP/1.1 состоят из слов, разделенных LWS или специальными символами. Эти специальные символы ДОЛЖНЫ находиться в цитируемой строке (quoted string), чтобы быть использованными в качестве значения параметра.
          token          = 1*<любой CHAR за исключением CTLs или
                              tspecials>
          tspecials      = "(" | ")" | "<" | ">" | "@"
                         | "," | ";" | ":" | "\" | <">
                         | "/" | "[" | "]" | "?" | "="
                         | "{" | "}" | SP | HT
В некоторые поля HTTP заголовка могут быть включены комментарии. Текст комментария окружается круглыми скобками. Комментарии допускаются только в полях, содержащих "comment" как часть определения значения поля. Во всех других полях круглые скобки рассматриваются частью значения поля.
          comment        = "(" *( ctext | comment ) ")"
          ctext          = <любой TEXT не включающий "(" and ")">
Строка текста анализируется как одно слово, если это цитирование, помеченное двойными кавычками.
          quoted-string  = ( <"> *(qdtext) <"> )
          qdtext         = <любой TEXT не включающий <">>
Символ наклонной черты влево ("\") может использоваться как односимвольный механизм цитирования только внутри конструкций комментария и строки цитирования (quoted-string).
          quoted-pair    = "\" CHAR
Наши ссылки на веб-страницы, можно скопировать html-код ссылки
| Книги по математике и физике, программы HTML, компьютерные технологии | Документация HTML, XML, JavaScript на русском языке для разработчиков W3C | 
Примечание. Удобная текстовая ссылка для форумов, блогов, цитирования материалов веб-сайта, код html можно скопировать и просто вставить в Ваши веб-страницы при цитировании материалов нашего веб-сайта. Материал носит неофициальный характер и приведен для ознакомления.

