2013-01-01 18:27:41 +01:00
|
|
|
Internals
|
|
|
|
=========
|
|
|
|
|
|
|
|
Architecture
|
|
|
|
------------
|
|
|
|
|
|
|
|
@todo Describe.
|
|
|
|
|
2013-01-17 23:37:50 +01:00
|
|
|
Lowercase header names
|
|
|
|
----------------------
|
|
|
|
|
|
|
|
For consistency reasons it has been chosen to convert all header names
|
|
|
|
to lowercase binary strings. This prevents the programmer from making
|
|
|
|
case mistakes, and is possible because header names are case insensitive.
|
|
|
|
|
|
|
|
This works fine for the large majority of clients. However, some badly
|
|
|
|
implemented clients, especially ones found in corporate code or closed
|
|
|
|
source products, may not handle header names in a case insensitive manner.
|
|
|
|
This means that when Cowboy returns lowercase header names, these clients
|
|
|
|
will not find the headers they are looking for.
|
|
|
|
|
|
|
|
A simple way to solve this is to create an `onresponse` hook that will
|
|
|
|
format the header names with the expected case.
|
|
|
|
|
|
|
|
``` erlang
|
|
|
|
capitalize_hook(Status, Headers, Body, Req) ->
|
|
|
|
Headers2 = [{cowboy_bstr:capitalize_token(N), V}
|
|
|
|
|| {N, V} <- Headers],
|
|
|
|
{ok, Req2} = cowboy_req:reply(State, Headers2, Body, Req),
|
|
|
|
Req2.
|
|
|
|
```
|
|
|
|
|
2013-01-01 18:27:41 +01:00
|
|
|
Efficiency considerations
|
|
|
|
-------------------------
|
|
|
|
|
|
|
|
@todo Mention that you need to cleanup in terminate especially if you
|
|
|
|
used the process dictionary, started timers, started monitoring...
|