@@ -238,16 +238,21 @@ def []= key, value
238238 # The policy for various headers, including how they are merged and normalized.
239239 POLICY = {
240240 # Headers which may only be specified once:
241- "content-type" => false ,
242241 "content-disposition" => false ,
243242 "content-length" => false ,
244- "user-agent" => false ,
245- "referer" => false ,
246- "host" => false ,
243+ "content-type" => false ,
244+ "expect" => false ,
247245 "from" => false ,
246+ "host" => false ,
248247 "location" => false ,
249248 "max-forwards" => false ,
249+ "range" => false ,
250+ "referer" => false ,
250251 "retry-after" => false ,
252+ "server" => false ,
253+ "transfer-encoding" => false ,
254+ "upgrade" => false ,
255+ "user-agent" => false ,
251256
252257 # Custom headers:
253258 "connection" => Header ::Connection ,
@@ -267,6 +272,7 @@ def []= key, value
267272 "etag" => Header ::ETag ,
268273 "if-match" => Header ::ETags ,
269274 "if-none-match" => Header ::ETags ,
275+ "if-range" => false ,
270276
271277 # Headers which may be specified multiple times, but which can't be concatenated:
272278 "www-authenticate" => Multiple ,
@@ -332,7 +338,10 @@ def delete(key)
332338 hash [ key ] = policy . new ( value )
333339 end
334340 else
335- # We can't merge these, we only expose the last one set.
341+ if hash . key? ( key )
342+ raise ArgumentError , "Duplicate singleton header key: #{ key . inspect } "
343+ end
344+
336345 hash [ key ] = value
337346 end
338347 end
0 commit comments