@@ -118,7 +118,7 @@ def raw_items(self):
118
118
119
119
def normalize_and_validate (headers , _parsed = False ):
120
120
new_headers = []
121
- saw_content_length = None
121
+ seen_content_length = None
122
122
saw_transfer_encoding = False
123
123
for name , value in headers :
124
124
# For headers coming out of the parser, we can safely skip some steps,
@@ -133,13 +133,13 @@ def normalize_and_validate(headers, _parsed=False):
133
133
name = name .lower ()
134
134
if name == b"content-length" :
135
135
validate (_content_length_re , value , "bad Content-Length" )
136
- if saw_content_length :
137
- if saw_content_length != value :
136
+ if seen_content_length is None :
137
+ seen_content_length = value
138
+ new_headers .append ((raw_name , name , value ))
139
+ else :
140
+ if seen_content_length != value :
138
141
raise LocalProtocolError ("conflicting Content-Length headers" )
139
- # We have a duplicate Content-Length, so collapse it
140
- new_headers .remove ((name , saw_content_length ))
141
- saw_content_length = value
142
- if name == b"transfer-encoding" :
142
+ elif name == b"transfer-encoding" :
143
143
# "A server that receives a request message with a transfer coding
144
144
# it does not understand SHOULD respond with 501 (Not
145
145
# Implemented)."
@@ -157,7 +157,9 @@ def normalize_and_validate(headers, _parsed=False):
157
157
error_status_hint = 501 ,
158
158
)
159
159
saw_transfer_encoding = True
160
- new_headers .append ((raw_name , name , value ))
160
+ new_headers .append ((raw_name , name , value ))
161
+ else :
162
+ new_headers .append ((raw_name , name , value ))
161
163
return Headers (new_headers )
162
164
163
165
0 commit comments