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

Last change on this file since 2135 was 2135, checked in by fielding@…, 7 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
Line 
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
5Accept = [ ( "," / ( media-range [ accept-params ] ) ) *( OWS "," [ OWS ( media-range [ accept-params ] ) ] ) ]
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 ] ) ] )
9Accept-Ranges = acceptable-ranges
10Age = delta-seconds
11Allow = [ ( "," / method ) *( OWS "," [ OWS method ] ) ]
12Authorization = credentials
13BWS = OWS
14Cache-Control = *( "," OWS ) cache-directive *( OWS "," [ OWS cache-directive ] )
15Connection = *( "," OWS ) connection-option *( OWS "," [ OWS connection-option ] )
16Content-Encoding = *( "," OWS ) content-coding *( OWS "," [ OWS content-coding ] )
17Content-Language = *( "," OWS ) language-tag *( OWS "," [ OWS language-tag ] )
18Content-Length = 1*DIGIT
19Content-Location = absolute-URI / partial-URI
20Content-Range = byte-content-range / other-content-range
21Content-Type = media-type
22Date = HTTP-date
23ETag = entity-tag
24Expect = *( "," OWS ) expectation *( OWS "," [ OWS expectation ] )
25Expires = HTTP-date
26From = mailbox
27GMT = %x47.4D.54 ; GMT
28
29HTTP-date = IMF-fixdate / obs-date
30HTTP-message = start-line *( header-field CRLF ) CRLF [ message-body ]
31HTTP-name = %x48.54.54.50 ; HTTP
32
33HTTP-version = HTTP-name "/" DIGIT "." DIGIT
34Host = uri-host [ ":" port ]
35IMF-fixdate = day-name "," SP date1 SP time-of-day SP GMT
36If-Match = "*" / ( *( "," OWS ) entity-tag *( OWS "," [ OWS entity-tag ] ) )
37If-Modified-Since = HTTP-date
38If-None-Match = "*" / ( *( "," OWS ) entity-tag *( OWS "," [ OWS entity-tag ] ) )
39If-Range = entity-tag / HTTP-date
40If-Unmodified-Since = HTTP-date
41Last-Modified = HTTP-date
42Location = URI-reference
43Max-Forwards = 1*DIGIT
44OWS = *( SP / HTAB )
45Pragma = *( "," OWS ) pragma-directive *( OWS "," [ OWS pragma-directive ] )
46Proxy-Authenticate = *( "," OWS ) challenge *( OWS "," [ OWS challenge ] )
47Proxy-Authorization = credentials
48RWS = 1*( SP / HTAB )
49Range = byte-ranges-specifier / other-ranges-specifier
50Referer = absolute-URI / partial-URI
51Retry-After = HTTP-date / delta-seconds
52Server = product *( RWS ( product / comment ) )
53TE = [ ( "," / t-codings ) *( OWS "," [ OWS t-codings ] ) ]
54Trailer = *( "," OWS ) field-name *( OWS "," [ OWS field-name ] )
55Transfer-Encoding = *( "," OWS ) transfer-coding *( OWS "," [ OWS transfer-coding ] )
56URI-reference = <URI-reference, defined in [RFC3986], Section 4.1>
57Upgrade = *( "," OWS ) protocol *( OWS "," [ OWS protocol ] )
58User-Agent = product *( RWS ( product / comment ) )
59Vary = "*" / ( *( "," OWS ) field-name *( OWS "," [ OWS field-name ] ) )
60Via = *( "," OWS ) ( received-protocol RWS received-by [ RWS comment ] ) *( OWS "," [ OWS ( received-protocol RWS received-by [ RWS comment ] ) ] )
61WWW-Authenticate = *( "," OWS ) challenge *( OWS "," [ OWS challenge ] )
62Warning = *( "," OWS ) warning-value *( OWS "," [ OWS warning-value ] )
63absolute-URI = <absolute-URI, defined in [RFC3986], Section 4.3>
64absolute-form = absolute-URI
65accept-ext = OWS ";" OWS token [ "=" word ]
66accept-params = weight *accept-ext
67acceptable-ranges = ( *( "," OWS ) range-unit *( OWS "," [ OWS range-unit ] ) ) / "none"
68asctime-date = day-name SP date3 SP time-of-day SP year
69asterisk-form = "*"
70attribute = token
71auth-param = token BWS "=" BWS ( token / quoted-string )
72auth-scheme = token
73authority = <authority, defined in [RFC3986], Section 3.2>
74authority-form = authority
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 / "*" )
78byte-range-set = *( "," OWS ) ( byte-range-spec / suffix-byte-range-spec ) *( OWS "," [ OWS ( byte-range-spec / suffix-byte-range-spec ) ] )
79byte-range-spec = first-byte-pos "-" [ last-byte-pos ]
80byte-ranges-specifier = bytes-unit "=" byte-range-set
81bytes-unit = "bytes"
82cache-directive = token [ "=" ( token / quoted-string ) ]
83challenge = auth-scheme [ 1*SP ( token68 / [ ( "," / auth-param ) *( OWS "," [ OWS auth-param ] ) ] ) ]
84charset = token
85chunk = chunk-size [ chunk-ext ] CRLF chunk-data CRLF
86chunk-data = 1*OCTET
87chunk-ext = *( ";" chunk-ext-name [ "=" chunk-ext-val ] )
88chunk-ext-name = token
89chunk-ext-val = token / quoted-str-nf
90chunk-size = 1*HEXDIG
91chunked-body = *chunk last-chunk trailer-part CRLF
92codings = content-coding / "identity" / "*"
93comment = "(" *( ctext / quoted-cpair / comment ) ")"
94complete-length = 1*DIGIT
95connection-option = token
96content-coding = token
97credentials = auth-scheme [ 1*SP ( token68 / [ ( "," / auth-param ) *( OWS "," [ OWS auth-param ] ) ] ) ]
98ctext = HTAB / SP / %x21-27 ; '!'-'''
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
124etagc = "!" / %x23-7E ; '#'-'~'
125 / obs-text
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 ] )
130extension-pragma = token [ "=" ( token / quoted-string ) ]
131field-content = *( HTAB / SP / VCHAR / obs-text )
132field-name = token
133field-value = *( field-content / obs-fold )
134first-byte-pos = 1*DIGIT
135header-field = field-name ":" OWS field-value BWS
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
142last-chunk = 1*"0" [ chunk-ext ] CRLF
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
147method = token
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
163obs-fold = CRLF ( SP / HTAB )
164obs-text = %x80-FF
165opaque-tag = DQUOTE *etagc DQUOTE
166origin-form = path-absolute [ "?" query ]
167other-content-range = other-range-unit SP other-range-resp
168other-range-resp = *CHAR
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
180protocol = protocol-name [ "/" protocol-version ]
181protocol-name = token
182protocol-version = token
183pseudonym = token
184qdtext = HTAB / SP / "!" / %x23-5B ; '#'-'['
185 / %x5D-7E ; ']'-'~'
186 / obs-text
187qdtext-nf = HTAB / SP / "!" / %x23-5B ; '#'-'['
188 / %x5D-7E ; ']'-'~'
189 / obs-text
190query = <query, defined in [RFC3986], Section 3.4>
191quoted-cpair = "\" ( HTAB / SP / VCHAR / obs-text )
192quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text )
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
197rank = ( "0" [ "." *3DIGIT ] ) / ( "1" [ "." *3"0" ] )
198reason-phrase = *( HTAB / SP / VCHAR / obs-text )
199received-by = ( uri-host [ ":" port ] ) / pseudonym
200received-protocol = [ protocol-name "/" ] protocol-version
201relative-part = <relative-part, defined in [RFC3986], Section 4.2>
202request-line = method SP request-target SP HTTP-version CRLF
203request-target = origin-form / absolute-form / authority-form / asterisk-form
204rfc850-date = day-name-l "," SP date2 SP time-of-day SP GMT
205second = 2DIGIT
206special = "(" / ")" / "<" / ">" / "@" / "," / ";" / ":" / "\" / DQUOTE / "/" / "[" / "]" / "?" / "=" / "{" / "}"
207start-line = request-line / status-line
208status-code = 3DIGIT
209status-line = HTTP-version SP status-code SP reason-phrase CRLF
210subtype = token
211suffix-byte-range-spec = "-" suffix-length
212suffix-length = 1*DIGIT
213t-codings = "trailers" / ( transfer-coding [ t-ranking ] )
214t-ranking = OWS ";" OWS "q=" rank
215tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~" / DIGIT / ALPHA
216time-of-day = hour ":" minute ":" second
217token = 1*tchar
218token68 = 1*( ALPHA / DIGIT / "-" / "." / "_" / "~" / "+" / "/" ) *"="
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
224unsatisfied-range = "*/" complete-length
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
234weight = OWS ";" OWS "q=" qvalue
235word = token / quoted-string
236year = 4DIGIT
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
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
253; Date defined but not used
254; ETag defined but not used
255; Expect defined but not used
256; Expires defined but not used
257; From defined but not used
258; HTTP-message defined but not used
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
265; Last-Modified defined but not used
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
284; chunked-body defined but not used
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.