RFC Errata
RFC 7540, "Hypertext Transfer Protocol Version 2 (HTTP/2)", May 2015
Note: This RFC has been obsoleted by RFC 9113
Note: This RFC has been updated by RFC 8740
Source of RFC: httpbis (wit)
Errata ID: 4645
Status: Rejected
Type: Technical
Publication Format(s) : TEXT
Reported By: Jessie Liu
Date Reported: 2016-03-29
Rejected by: Barry Leiba
Date Rejected: 2016-03-29
Section 5.1 says:
idle: All streams start in the "idle" state. The following transitions are valid from this state: * Sending or receiving a HEADERS frame causes the stream to become "open". The stream identifier is selected as described in Section 5.1.1. The same HEADERS frame can also cause a stream to immediately become "half-closed". * Sending a PUSH_PROMISE frame on another stream reserves the idle stream that is identified for later use. The stream state for the reserved stream transitions to "reserved (local)". * Receiving a PUSH_PROMISE frame on another stream reserves an idle stream that is identified for later use. The stream state for the reserved stream transitions to "reserved (remote)". * Note that the PUSH_PROMISE frame is not sent on the idle stream but references the newly reserved stream in the Promised Stream ID field. Receiving any frame other than HEADERS or PRIORITY on a stream in this state MUST be treated as a connection error (Section 5.4.1) of type PROTOCOL_ERROR.
It should say:
idle: All streams start in the "idle" state. The following transitions are valid from this state: * Sending or receiving a HEADERS frame causes the stream to become "open". The stream identifier is selected as described in Section 5.1.1. The same HEADERS frame can also cause a stream to immediately become "half-closed". * Sending a PUSH_PROMISE frame on another stream reserves the idle stream that is identified for later use. The stream state for the reserved stream transitions to "reserved (local)". * Receiving a PUSH_PROMISE frame on another stream reserves an idle stream that is identified for later use. The stream state for the reserved stream transitions to "reserved (remote)". * Note that the PUSH_PROMISE frame is not sent on the idle stream but references the newly reserved stream in the Promised Stream ID field. Receiving any frame other than HEADERS, PUSH_PROMISE or PRIORITY on a stream in this state MUST be treated as a connection error (Section 5.4.1) of type PROTOCOL_ERROR.
Notes:
According to the description above and the state transformation in Figure 2, a stream in the 'idle' state could receive a PUSH_PROMISE frame.
While in the last statement of Original Text, receiving a PUSH_PROMISE on a stream in 'idle' state is a connection error.
Please fix this inconsistency problem.
--VERIFIER NOTES--
This is a duplicate of errata report #4535.
The report is incorrect: the text says "another stream" and has a note that explains this. The confusion that obviously exists should be considered in a future revision of the document.