On Tue, Jun 3, 2014 at 9:38 AM, Jake Archibald <[email protected]> wrote:
> On 3 June 2014 16:50, Anne van Kesteren <[email protected]> wrote:
>>
>> On Sun, Jun 1, 2014 at 8:06 AM, Domenic Denicola
>> <[email protected]> wrote:
>>
>> > - I like HeaderMap a lot, but for construction purposes, I wonder if a
>> > shorthand for the usual case could be provided. E.g. it would be nice to be
>> > able to do
>> >
>> > fetch("http://example.com", {
>> > headers: {
>> > "X-Foo": "Bar"
>> > }
>> > });
>> >
>> > instead of, assuming a constructor is added,
>> >
>> > fetch("http://example.com", {
>> > headers: new HeaderMap([
>> > ["X-Foo", "Bar"]
>> > ])
>> > });
>>
>> Yeah, it's not clear to me what is best here. An object whose keys are
>> ByteString and values are either ByteString or a sequence of
>> ByteString? I agree that we want this.
>
> I vote ByteString: ByteString. If you want something more complicated,
> provide a HeaderMap or mutate after construction.
One thing we should keep in mind is if we actually need to support
100% of all the crazyness that servers do. And especially if we need
to support it in a particularly convenient way.
Something like
headers: {
"X-Foo": "Bar"
}
Does actually have a defined order between the name-value pairs, even
though it's not terribly explicit. And we could even support
headers: {
"X-Foo": ["Bar", "Bar2"]
}
For supporting sending multiple "X-Foo" headers.
This wouldn't support interleaving headers such that we send two
"X-Foo" headers with a "X-Bar" header in between, but are there
actually use cases for that?
I feel fairly sure that simply doing:
headers: {
"X-Foo": ["Bar", "Bar2"]
}
Will cover well over 99% of everything that people need to do. And
hopefully the remaining part of a percent could update their servers
to actually support HTTP semantics properly.
/ Jonas