header parsing
>==============<

Introduction

Header parsing is usually invisible to the user. But still, this is quite an important tasks. The first version of this was very buggy, so we decided to create a correct version using a parser. This document describes the rules that were used for the parser.

BNF

header = statusline newline dataline {dataline} newline
 
statusline = "HTTP/" version space statuscode space statusword
 
version = "0.9"|"1.0"|"1.1"
 
statuscode = number number number
 
statusword = token {token}
 
token = (any character except newline)
 
dataline = name ":" space data newline {folding}
 
name = nametoken {nametoken}
 
nametoken = letter|number|dash
 
data = datatoken {datatoken}
 
datatoken = (any character except newline)
 
folding = space {space} data newline
 
newline = "\n"
 
space = " "|"\t"
 
number = "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"
 
letter = "A"|"B"|"C"|"D"|"E"|"F"|"G"|"H"|"I"|"J"|"K"|"L"|"M"|"N"|"O"|"P"|
         "Q"|"R"|"S"|"T"|"U"|"V"|"W"|"X"|"Y"|"Z"|"a"|"b"|"c"|"d"|"f"|"g"|
         "h"|"i"|"j"|"k"|"l"|"m"|"n"|"o"|"p"|"q"|"r"|"s"|"t"|"u"|"v"|"w"|
         "x"|"y"|"z"