source: draft-ietf-httpbis/latest/httpbis.abnf @ 2137

Last change on this file since 2137 was 2135, checked in by fielding@…, 8 years ago

Cleanup on aisle p5. Addresses #405

Don't refer to Range Units as Range Specifiers;
move requirements on unknown ranges to the header field definitions.
Disentangle the Content-Range ABNF so that it correctly distinguishes between
the three different forms in use and does not allow them to be mixed.
Use the new ABNF alternatives to simplify the prose.

  • Property svn:eol-style set to native
File size: 11.5 KB
RevLine 
[1125]1; the ABNF below was extracted from the IETF HTTPbis WG Internet Drafts
2; please see <http://tools.ietf.org/html/draft-ietf-httpbis-p1-messaging>
3; for copyright information.
4
[1663]5Accept = [ ( "," / ( media-range [ accept-params ] ) ) *( OWS "," [ OWS ( media-range [ accept-params ] ) ] ) ]
[1831]6Accept-Charset = *( "," OWS ) ( ( charset / "*" ) [ weight ] ) *( OWS "," [ OWS ( ( charset / "*" ) [ weight ] ) ] )
7Accept-Encoding = [ ( "," / ( codings [ weight ] ) ) *( OWS "," [ OWS ( codings [ weight ] ) ] ) ]
8Accept-Language = *( "," OWS ) ( language-range [ weight ] ) *( OWS "," [ OWS ( language-range [ weight ] ) ] )
[1232]9Accept-Ranges = acceptable-ranges
[1231]10Age = delta-seconds
[1557]11Allow = [ ( "," / method ) *( OWS "," [ OWS method ] ) ]
[1230]12Authorization = credentials
[1125]13BWS = OWS
[1231]14Cache-Control = *( "," OWS ) cache-directive *( OWS "," [ OWS cache-directive ] )
[1706]15Connection = *( "," OWS ) connection-option *( OWS "," [ OWS connection-option ] )
[1234]16Content-Encoding = *( "," OWS ) content-coding *( OWS "," [ OWS content-coding ] )
17Content-Language = *( "," OWS ) language-tag *( OWS "," [ OWS language-tag ] )
[1236]18Content-Length = 1*DIGIT
[1234]19Content-Location = absolute-URI / partial-URI
[2135]20Content-Range = byte-content-range / other-content-range
[1234]21Content-Type = media-type
[1236]22Date = HTTP-date
[1233]23ETag = entity-tag
[1235]24Expect = *( "," OWS ) expectation *( OWS "," [ OWS expectation ] )
[1231]25Expires = HTTP-date
[1235]26From = mailbox
[1125]27GMT = %x47.4D.54 ; GMT
28
[2082]29HTTP-date = IMF-fixdate / obs-date
[1125]30HTTP-message = start-line *( header-field CRLF ) CRLF [ message-body ]
[1557]31HTTP-name = %x48.54.54.50 ; HTTP
32
33HTTP-version = HTTP-name "/" DIGIT "." DIGIT
[1236]34Host = uri-host [ ":" port ]
[2082]35IMF-fixdate = day-name "," SP date1 SP time-of-day SP GMT
[1233]36If-Match = "*" / ( *( "," OWS ) entity-tag *( OWS "," [ OWS entity-tag ] ) )
37If-Modified-Since = HTTP-date
38If-None-Match = "*" / ( *( "," OWS ) entity-tag *( OWS "," [ OWS entity-tag ] ) )
[1232]39If-Range = entity-tag / HTTP-date
[1233]40If-Unmodified-Since = HTTP-date
41Last-Modified = HTTP-date
[1235]42Location = URI-reference
43Max-Forwards = 1*DIGIT
[1546]44OWS = *( SP / HTAB )
[1231]45Pragma = *( "," OWS ) pragma-directive *( OWS "," [ OWS pragma-directive ] )
[1230]46Proxy-Authenticate = *( "," OWS ) challenge *( OWS "," [ OWS challenge ] )
47Proxy-Authorization = credentials
[1546]48RWS = 1*( SP / HTAB )
[1232]49Range = byte-ranges-specifier / other-ranges-specifier
[1235]50Referer = absolute-URI / partial-URI
51Retry-After = HTTP-date / delta-seconds
52Server = product *( RWS ( product / comment ) )
[1236]53TE = [ ( "," / t-codings ) *( OWS "," [ OWS t-codings ] ) ]
54Trailer = *( "," OWS ) field-name *( OWS "," [ OWS field-name ] )
55Transfer-Encoding = *( "," OWS ) transfer-coding *( OWS "," [ OWS transfer-coding ] )
[1125]56URI-reference = <URI-reference, defined in [RFC3986], Section 4.1>
[1538]57Upgrade = *( "," OWS ) protocol *( OWS "," [ OWS protocol ] )
[1235]58User-Agent = product *( RWS ( product / comment ) )
[1231]59Vary = "*" / ( *( "," OWS ) field-name *( OWS "," [ OWS field-name ] ) )
[1663]60Via = *( "," OWS ) ( received-protocol RWS received-by [ RWS comment ] ) *( OWS "," [ OWS ( received-protocol RWS received-by [ RWS comment ] ) ] )
[1230]61WWW-Authenticate = *( "," OWS ) challenge *( OWS "," [ OWS challenge ] )
[1231]62Warning = *( "," OWS ) warning-value *( OWS "," [ OWS warning-value ] )
[1125]63absolute-URI = <absolute-URI, defined in [RFC3986], Section 4.3>
[1581]64absolute-form = absolute-URI
[1125]65accept-ext = OWS ";" OWS token [ "=" word ]
[1831]66accept-params = weight *accept-ext
[1125]67acceptable-ranges = ( *( "," OWS ) range-unit *( OWS "," [ OWS range-unit ] ) ) / "none"
68asctime-date = day-name SP date3 SP time-of-day SP year
[1581]69asterisk-form = "*"
[1125]70attribute = token
[1386]71auth-param = token BWS "=" BWS ( token / quoted-string )
[1125]72auth-scheme = token
73authority = <authority, defined in [RFC3986], Section 3.2>
[1581]74authority-form = authority
[2135]75byte-content-range = bytes-unit SP ( byte-range-resp "/" unsatisfied-range )
76byte-range = first-byte-pos "-" last-byte-pos
77byte-range-resp = byte-range "/" ( complete-length / "*" )
[1663]78byte-range-set = *( "," OWS ) ( byte-range-spec / suffix-byte-range-spec ) *( OWS "," [ OWS ( byte-range-spec / suffix-byte-range-spec ) ] )
[1125]79byte-range-spec = first-byte-pos "-" [ last-byte-pos ]
80byte-ranges-specifier = bytes-unit "=" byte-range-set
81bytes-unit = "bytes"
[1695]82cache-directive = token [ "=" ( token / quoted-string ) ]
[1815]83challenge = auth-scheme [ 1*SP ( token68 / [ ( "," / auth-param ) *( OWS "," [ OWS auth-param ] ) ] ) ]
[1125]84charset = token
[1425]85chunk = chunk-size [ chunk-ext ] CRLF chunk-data CRLF
[1125]86chunk-data = 1*OCTET
[1425]87chunk-ext = *( ";" chunk-ext-name [ "=" chunk-ext-val ] )
[1125]88chunk-ext-name = token
89chunk-ext-val = token / quoted-str-nf
90chunk-size = 1*HEXDIG
[1557]91chunked-body = *chunk last-chunk trailer-part CRLF
[1406]92codings = content-coding / "identity" / "*"
[1125]93comment = "(" *( ctext / quoted-cpair / comment ) ")"
[2135]94complete-length = 1*DIGIT
[1706]95connection-option = token
[1125]96content-coding = token
[1815]97credentials = auth-scheme [ 1*SP ( token68 / [ ( "," / auth-param ) *( OWS "," [ OWS auth-param ] ) ] ) ]
[1966]98ctext = HTAB / SP / %x21-27 ; '!'-'''
[1125]99 / %x2A-5B ; '*'-'['
100 / %x5D-7E ; ']'-'~'
101 / obs-text
102date1 = day SP month SP year
103date2 = day "-" month "-" 2DIGIT
104date3 = month SP ( 2DIGIT / ( SP DIGIT ) )
105day = 2DIGIT
106day-name = %x4D.6F.6E ; Mon
107 / %x54.75.65 ; Tue
108 / %x57.65.64 ; Wed
109 / %x54.68.75 ; Thu
110 / %x46.72.69 ; Fri
111 / %x53.61.74 ; Sat
112 / %x53.75.6E ; Sun
113
114day-name-l = %x4D.6F.6E.64.61.79 ; Monday
115 / %x54.75.65.73.64.61.79 ; Tuesday
116 / %x57.65.64.6E.65.73.64.61.79 ; Wednesday
117 / %x54.68.75.72.73.64.61.79 ; Thursday
118 / %x46.72.69.64.61.79 ; Friday
119 / %x53.61.74.75.72.64.61.79 ; Saturday
120 / %x53.75.6E.64.61.79 ; Sunday
121
122delta-seconds = 1*DIGIT
123entity-tag = [ weak ] opaque-tag
[1470]124etagc = "!" / %x23-7E ; '#'-'~'
125 / obs-text
[1494]126expect-name = token
127expect-param = expect-name [ BWS "=" BWS expect-value ]
128expect-value = token / quoted-string
129expectation = expect-name [ BWS "=" BWS expect-value ] *( OWS ";" [ OWS expect-param ] )
[1125]130extension-pragma = token [ "=" ( token / quoted-string ) ]
[1425]131field-content = *( HTAB / SP / VCHAR / obs-text )
[1125]132field-name = token
[1425]133field-value = *( field-content / obs-fold )
[1125]134first-byte-pos = 1*DIGIT
[1425]135header-field = field-name ":" OWS field-value BWS
[1125]136hour = 2DIGIT
137http-URI = "http://" authority path-abempty [ "?" query ]
138https-URI = "https://" authority path-abempty [ "?" query ]
139language-range = <language-range, defined in [RFC4647], Section 2.1>
140language-tag = <Language-Tag, defined in [RFC5646], Section 2.1>
141last-byte-pos = 1*DIGIT
[1425]142last-chunk = 1*"0" [ chunk-ext ] CRLF
[1125]143mailbox = <mailbox, defined in [RFC5322], Section 3.4>
144media-range = ( "*/*" / ( type "/*" ) / ( type "/" subtype ) ) *( OWS ";" OWS parameter )
145media-type = type "/" subtype *( OWS ";" OWS parameter )
146message-body = *OCTET
[1557]147method = token
[1125]148minute = 2DIGIT
149month = %x4A.61.6E ; Jan
150 / %x46.65.62 ; Feb
151 / %x4D.61.72 ; Mar
152 / %x41.70.72 ; Apr
153 / %x4D.61.79 ; May
154 / %x4A.75.6E ; Jun
155 / %x4A.75.6C ; Jul
156 / %x41.75.67 ; Aug
157 / %x53.65.70 ; Sep
158 / %x4F.63.74 ; Oct
159 / %x4E.6F.76 ; Nov
160 / %x44.65.63 ; Dec
161
162obs-date = rfc850-date / asctime-date
[1425]163obs-fold = CRLF ( SP / HTAB )
[1125]164obs-text = %x80-FF
[1470]165opaque-tag = DQUOTE *etagc DQUOTE
[1581]166origin-form = path-absolute [ "?" query ]
[2135]167other-content-range = other-range-unit SP other-range-resp
168other-range-resp = *CHAR
[1125]169other-range-set = 1*CHAR
170other-range-unit = token
171other-ranges-specifier = other-range-unit "=" other-range-set
172parameter = attribute "=" value
173partial-URI = relative-part [ "?" query ]
174path-abempty = <path-abempty, defined in [RFC3986], Section 3.3>
175path-absolute = <path-absolute, defined in [RFC3986], Section 3.3>
176port = <port, defined in [RFC3986], Section 3.2.3>
177pragma-directive = "no-cache" / extension-pragma
178product = token [ "/" product-version ]
179product-version = token
[1538]180protocol = protocol-name [ "/" protocol-version ]
[1125]181protocol-name = token
182protocol-version = token
183pseudonym = token
[1966]184qdtext = HTAB / SP / "!" / %x23-5B ; '#'-'['
[1125]185 / %x5D-7E ; ']'-'~'
186 / obs-text
[1425]187qdtext-nf = HTAB / SP / "!" / %x23-5B ; '#'-'['
[1125]188 / %x5D-7E ; ']'-'~'
189 / obs-text
190query = <query, defined in [RFC3986], Section 3.4>
[1425]191quoted-cpair = "\" ( HTAB / SP / VCHAR / obs-text )
192quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text )
[1125]193quoted-str-nf = DQUOTE *( qdtext-nf / quoted-pair ) DQUOTE
194quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE
195qvalue = ( "0" [ "." *3DIGIT ] ) / ( "1" [ "." *3"0" ] )
196range-unit = bytes-unit / other-range-unit
[1831]197rank = ( "0" [ "." *3DIGIT ] ) / ( "1" [ "." *3"0" ] )
[1557]198reason-phrase = *( HTAB / SP / VCHAR / obs-text )
[1125]199received-by = ( uri-host [ ":" port ] ) / pseudonym
200received-protocol = [ protocol-name "/" ] protocol-version
201relative-part = <relative-part, defined in [RFC3986], Section 4.2>
[1557]202request-line = method SP request-target SP HTTP-version CRLF
[1581]203request-target = origin-form / absolute-form / authority-form / asterisk-form
[1125]204rfc850-date = day-name-l "," SP date2 SP time-of-day SP GMT
205second = 2DIGIT
206special = "(" / ")" / "<" / ">" / "@" / "," / ";" / ":" / "\" / DQUOTE / "/" / "[" / "]" / "?" / "=" / "{" / "}"
[1557]207start-line = request-line / status-line
208status-code = 3DIGIT
209status-line = HTTP-version SP status-code SP reason-phrase CRLF
[1125]210subtype = token
211suffix-byte-range-spec = "-" suffix-length
212suffix-length = 1*DIGIT
[1831]213t-codings = "trailers" / ( transfer-coding [ t-ranking ] )
214t-ranking = OWS ";" OWS "q=" rank
[1125]215tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~" / DIGIT / ALPHA
216time-of-day = hour ":" minute ":" second
217token = 1*tchar
[1815]218token68 = 1*( ALPHA / DIGIT / "-" / "." / "_" / "~" / "+" / "/" ) *"="
[1125]219trailer-part = *( header-field CRLF )
220transfer-coding = "chunked" / "compress" / "deflate" / "gzip" / transfer-extension
221transfer-extension = token *( OWS ";" OWS transfer-parameter )
222transfer-parameter = attribute BWS "=" BWS value
223type = token
[2135]224unsatisfied-range = "*/" complete-length
[1125]225uri-host = <host, defined in [RFC3986], Section 3.2.2>
226value = word
227warn-agent = ( uri-host [ ":" port ] ) / pseudonym
228warn-code = 3DIGIT
229warn-date = DQUOTE HTTP-date DQUOTE
230warn-text = quoted-string
231warning-value = warn-code SP warn-agent SP warn-text [ SP warn-date ]
232weak = %x57.2F ; W/
233
[1831]234weight = OWS ";" OWS "q=" qvalue
[1125]235word = token / quoted-string
236year = 4DIGIT
[1138]237; Accept defined but not used
238; Accept-Charset defined but not used
239; Accept-Encoding defined but not used
240; Accept-Language defined but not used
241; Accept-Ranges defined but not used
242; Age defined but not used
243; Allow defined but not used
244; Authorization defined but not used
245; Cache-Control defined but not used
246; Connection defined but not used
[1125]247; Content-Encoding defined but not used
248; Content-Language defined but not used
249; Content-Length defined but not used
250; Content-Location defined but not used
251; Content-Range defined but not used
252; Content-Type defined but not used
[1138]253; Date defined but not used
254; ETag defined but not used
255; Expect defined but not used
[1125]256; Expires defined but not used
[1138]257; From defined but not used
[1125]258; HTTP-message defined but not used
[1138]259; Host defined but not used
260; If-Match defined but not used
261; If-Modified-Since defined but not used
262; If-None-Match defined but not used
263; If-Range defined but not used
264; If-Unmodified-Since defined but not used
[1125]265; Last-Modified defined but not used
[1138]266; Location defined but not used
267; Max-Forwards defined but not used
268; Pragma defined but not used
269; Proxy-Authenticate defined but not used
270; Proxy-Authorization defined but not used
271; Range defined but not used
272; Referer defined but not used
273; Retry-After defined but not used
274; Server defined but not used
275; TE defined but not used
276; Trailer defined but not used
277; Transfer-Encoding defined but not used
278; Upgrade defined but not used
279; User-Agent defined but not used
280; Vary defined but not used
281; Via defined but not used
282; WWW-Authenticate defined but not used
283; Warning defined but not used
[1557]284; chunked-body defined but not used
[1125]285; http-URI defined but not used
286; https-URI defined but not used
287; special defined but not used
Note: See TracBrowser for help on using the repository browser.