rfc7230 recommends that the Host:-header should be sent first:
https://tools.ietf.org/html/rfc7230#section-5.4
Since the Host field-value is critical information for handling a
request, a user agent SHOULD generate Host as the first header field
following the request-line.
If one explicitly sets a Host-header, curl emits such a "custom" Host:-header in the order it was set, i.e. not as the first header as recommended by rfc7230:
The order is essentially the same with the curl command line tool and the
PHP curl bindings.
$ nc -l 1234 &
[1] 50827
$ curl -vH 'X-foo: asdf' -H 'Host: asdf' http://127.0.0.1:1234/qwert
Trying 127.0.0.1...
Connected to 127.0.0.1 (127.0.0.1) port 1234 (#0)
GET /qwert HTTP/1.1
User-Agent: curl/7.40.0
Accept: /
X-foo: asdf
Host: asdf
GET /qwert HTTP/1.1
User-Agent: curl/7.40.0
Accept: /
X-foo: asdf
Host: asdf
Thanks! We should fix this.
Thanks!
Fixed in commit a5d994941c.
Man, that included updating 120 test cases to use the new order!