diff --git a/draft-ietf-httpbis-messaging-latest.html b/draft-ietf-httpbis-messaging-latest.html index cb935555a..245c15538 100644 --- a/draft-ietf-httpbis-messaging-latest.html +++ b/draft-ietf-httpbis-messaging-latest.html @@ -582,7 +582,7 @@ content: "Fielding, et al."; } @bottom-center { - content: "Expires September 23, 2019"; + content: "Expires September 27, 2019"; } @bottom-right { content: "[Page " counter(page) "]"; @@ -628,7 +628,7 @@ - + @@ -655,7 +655,7 @@ Fastly - Expires: September 23, 2019 + Expires: September 27, 2019 J. Reschke, Editor @@ -664,7 +664,7 @@ - March 22, 2019 + March 26, 2019 @@ -718,7 +718,7 @@

Status of This Memo

Internet-Drafts as reference material or to cite them other than as “work in progress”.

-

This Internet-Draft will expire on September 23, 2019.

+

This Internet-Draft will expire on September 27, 2019.

@@ -1317,10 +1317,9 @@

3.3. 4. Status Line

The first line of a response message is the status-line, consisting of the protocol - version, a space (SP), the status code, another space, a possibly empty textual phrase - describing the status code, and ending with CRLF.

+ version, a space (SP), the status code, another space, an OPTIONAL textual phrase describing the status code, and ending with CRLF.

-
  status-line = HTTP-version SP status-code SP reason-phrase CRLF
+         
          

Although the status-line grammar rule requires that each of the component elements @@ -1351,7 +1350,12 @@

4. 

-
  reason-phrase  = *( HTAB / SP / VCHAR / obs-text )
+         
+

Note that while the reason-phrase is optional, the preceding SP character is not. + In other words, absent a reason-phrase the status-line ends with a trailing SP, followed + by CRLF.

+
+
@@ -2958,14 +2962,14 @@

Appendix A.  quoted-string = <quoted-string, see [Semantics], Section 4.2.3> rank = ( "0" [ "." *3DIGIT ] ) / ( "1" [ "." *3"0" ] ) -reason-phrase = *( HTAB / SP / VCHAR / obs-text ) +reason-phrase = 1*( HTAB / SP / VCHAR / obs-text ) request-line = method SP request-target SP HTTP-version CRLF request-target = origin-form / absolute-form / authority-form / asterisk-form start-line = request-line / status-line status-code = 3DIGIT -status-line = HTTP-version SP status-code SP reason-phrase CRLF +status-line = HTTP-version SP status-code SP [ reason-phrase ] CRLF t-codings = "trailers" / ( transfer-coding [ t-ranking ] ) t-ranking = OWS ";" OWS "q=" rank @@ -3285,6 +3289,8 @@

D.6. Section 9.8, clarify that protocol-name is to be matched case-insensitively (<https://github.com/httpwg/http-core/issues/8>) +
  • In Section 4, add clarifications about empty reason phrases (<https://github.com/httpwg/http-core/issues/197>) +
  • diff --git a/draft-ietf-httpbis-messaging-latest.xml b/draft-ietf-httpbis-messaging-latest.xml index 2b311b04d..57938b9e8 100644 --- a/draft-ietf-httpbis-messaging-latest.xml +++ b/draft-ietf-httpbis-messaging-latest.xml @@ -717,11 +717,11 @@ https://www.example.org The first line of a response message is the status-line, consisting of the protocol version, a space (SP), the status code, another space, - a possibly empty textual phrase describing the status code, and + an &OPTIONAL; textual phrase describing the status code, and ending with CRLF. - status-line = HTTP-version SP status-code SP reason-phrase CRLF + status-line = HTTP-version SP status-code SP [reason-phrase] CRLF Although the status-line grammar rule requires that each of the component @@ -759,8 +759,13 @@ https://www.example.org reliable channel for information (it might be discarded or overwritten by intermediaries, and it is not transmitted in other versions of HTTP). + + Note that while the reason-phrase is optional, the preceding SP character + is not. In other words, absent a reason-phrase the status-line ends + with a trailing SP, followed by CRLF. + - reason-phrase = *( HTAB / SP / VCHAR / obs-text ) + reason-phrase = 1*( HTAB / SP / VCHAR / obs-text ) @@ -3030,14 +3035,14 @@ Upgrade: HTTP/2.0 quoted-string = <quoted-string, see > rank = ( "0" [ "." *3DIGIT ] ) / ( "1" [ "." *3"0" ] ) -reason-phrase = *( HTAB / SP / VCHAR / obs-text ) +reason-phrase = 1*( HTAB / SP / VCHAR / obs-text ) request-line = method SP request-target SP HTTP-version CRLF request-target = origin-form / absolute-form / authority-form / asterisk-form start-line = request-line / status-line status-code = 3DIGIT -status-line = HTTP-version SP status-code SP reason-phrase CRLF +status-line = HTTP-version SP status-code SP [ reason-phrase ] CRLF t-codings = "trailers" / ( transfer-coding [ t-ranking ] ) t-ranking = OWS ";" OWS "q=" rank @@ -3379,6 +3384,7 @@ Upgrade: HTTP/2.0
    diff --git a/httpbis.abnf b/httpbis.abnf index 305def644..667ea1975 100644 --- a/httpbis.abnf +++ b/httpbis.abnf @@ -187,7 +187,7 @@ quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE qvalue = ( "0" [ "." *3DIGIT ] ) / ( "1" [ "." *3"0" ] ) range-unit = bytes-unit / other-range-unit rank = ( "0" [ "." *3DIGIT ] ) / ( "1" [ "." *3"0" ] ) -reason-phrase = *( HTAB / SP / VCHAR / obs-text ) +reason-phrase = 1*( HTAB / SP / VCHAR / obs-text ) received-by = ( uri-host [ ":" port ] ) / pseudonym received-protocol = [ protocol-name "/" ] protocol-version relative-part = @@ -198,7 +198,7 @@ second = 2DIGIT segment = start-line = request-line / status-line status-code = 3DIGIT -status-line = HTTP-version SP status-code SP reason-phrase CRLF +status-line = HTTP-version SP status-code SP [ reason-phrase ] CRLF subtype = token suffix-byte-range-spec = "-" suffix-length suffix-length = 1*DIGIT