Skip to content

Commit 78d4e21

Browse files
Merge pull request #968 from martinthomson/host-authority-mix
Host and :authority must agree
2 parents 5741b83 + ca28eef commit 78d4e21

File tree

1 file changed

+23
-3
lines changed

1 file changed

+23
-3
lines changed

draft-ietf-httpbis-http2bis.xml

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2934,16 +2934,33 @@ cookie: e=f
29342934
pseudo-header field to convey authority information, unless there is no authority
29352935
information to convey (in which case it MUST NOT generate :authority).
29362936
</t>
2937+
<t>
2938+
Clients MUST NOT generate a request with a <tt>Host</tt> header field that differs
2939+
from the <tt>:authority</tt> pseudo-header field. A
2940+
server SHOULD treat a request as malformed if it contains a <tt>Host</tt> header
2941+
field that identifies a different entity to the <tt>:authority</tt> pseudo-header
2942+
field. The values of fields need to be normalized to compare them (see <xref
2943+
target="RFC3986" section="6.2"/>). An origin server can apply any normalization
2944+
method, whereas other servers MUST perform scheme-based normalization (see <xref
2945+
target="RFC3986" section="6.2.3"/>) of the two fields.
2946+
</t>
29372947
<t>
29382948
An intermediary that forwards a request over HTTP/2 MUST construct an
29392949
<tt>:authority</tt> pseudo-header field using the authority information from the
29402950
control data of the original request, unless the the original request's target URI
29412951
does not contain authority information (in which case it MUST NOT generate
2942-
<tt>:authority</tt>). Note that the Host header field is not the sole source of this
2943-
information; see <xref target="HTTP" section="7.2"/>.
2952+
<tt>:authority</tt>). Note that the <tt>Host</tt> header field is not the sole
2953+
source of this information; see <xref target="HTTP" section="7.2"/>.
2954+
</t>
2955+
<t>
2956+
An intermediary that needs to generate a <tt>Host</tt> header field (which might be
2957+
necessary to construct an HTTP/1.1 request) MUST use the value from the <tt>:authority</tt>
2958+
pseudo-header field as the value of the <tt>Host</tt> field,
2959+
unless the intermediary also changes the request target. This replaces any existing
2960+
<tt>Host</tt> field to avoid potential vulnerabilities in HTTP routing.
29442961
</t>
29452962
<t>
2946-
An intermediary that forwards a request over HTTP/2 MUST retain any <tt>Host</tt>
2963+
An intermediary that forwards a request over HTTP/2 MAY retain any <tt>Host</tt>
29472964
header field.
29482965
</t>
29492966
<t>
@@ -5172,6 +5189,9 @@ cookie: e=f
51725189
Connection-specific header fields - which are prohibited - are more precisely and
51735190
comprehensively identified.
51745191
</li>
5192+
<li>
5193+
<tt>Host</tt> and <tt>:authority</tt> are no longer permitted to disagree.
5194+
</li>
51755195
</ul>
51765196
</section>
51775197
<section numbered="false">

0 commit comments

Comments
 (0)