shotgun icon indicating copy to clipboard operation
shotgun copied to clipboard

HTTP spec allows multiple headers with the same key

Open devinus opened this issue 8 years ago • 2 comments

Using a map to represent headers is therefore wrong.

Example is multiple Set-Cookie headers.

devinus avatar Oct 15 '15 23:10 devinus

Perhaps I'm misinterpreting this, but the second-to-last paragraph of section 3.2.2 of RFC 7230 [0] seems to permit exactly what we're doing.... assuming that we're joining the additional field-values to the first field-value in a comma-separated list:

A recipient MAY combine multiple header fields with the same field name into one "field-name: field-value" pair, without changing the semantics of the message, by appending each subsequent field value to the combined field value in order, separated by a comma. The order in which header fields with the same field name are received is therefore significant to the interpretation of the combined field value; a proxy MUST NOT change the order of these field values when forwarding a message.

Amusingly, in the next paragraph, the Set-Cookie headers behavior that you mention is explicitly called out as non-compliant, but is a widely-used violation that -in practice- requires special casing.

[0] https://tools.ietf.org/html/rfc7230#section-3.2.2

kennethlakin avatar Nov 10 '15 02:11 kennethlakin

I agree with the fact that multiple headers (except Set-Cookie headers) could be sent as a comma separated list under the same header entry. However, for the sake of convention/compatibility with gun and handling that edge case with cookies, I'd say supporting both maps/proplist as headers should be allowed.

This is a related issue I submitted a couple days ago: https://github.com/inaka/shotgun/issues/125

davoclavo avatar Dec 02 '15 21:12 davoclavo