[erlang-questions] weird http parsing

Sverker Eriksson sverker@REDACTED
Mon Jul 25 19:22:39 CEST 2011

Andy W. Song wrote:
> Hi,
> I'm using inet:setopts(Sock, [{active,true},{packet, http}]) to receive http
> packets. I found that Erlang silently modifies some http header name fields
> from like "Sec-WebSocket-Origin" to "Sec-Websocket-Origin". But another
> fields "Sec-WebSocket-Version" is not modified. It's quite strange.
Yes, header names shorter than 21 characters are modified, while longer 
names are not. I agree it's a bit strange.

> I know http header field name is case insensitive but Erlang should not
> silently and inconsistently modify it.
Wouldn't the best behavior be to *consistently* modify the header names 
to a predefined format (uppercase only first and after '-'). Then you 
can do an exact string compare.

> After I found it I tried to use all lower case. But  "erlang:decode_packet"
> decodes some of the fields into atoms and other not-recognized ones to
> string so it's quite inconvenient to use all lower case.
Yes, some header names are recognized and presented as atoms. That is 
documented in erlang:decode_packet.

> Any ideas to mitigate this?
If you have control over input, use uppercase only as first character 
and directly after '-'.

/Sverker, Erlang/OTP

More information about the erlang-questions mailing list