How do I send a header to my Web server (such as Nginx / Lighttpd / Apache / ISS) on a Apple OS X or Unix or Linux based system using a curl command line option for testing and debugging my web apps or server nodes behind a load balancer?
The curl command supports -H or --header option to pass extra HTTP header to use when getting a web page from your web server. You may specify any number of extra headers. When you add a custom header that has the same name as one of the internal ones curl would use, your externally set header will be used instead of the internal one. The syntax is:
curl -H 'YOUR-EXTRA-HEADER-HERE' apache-server-ip curl -H 'YOUR-EXTRA-HEADER-1-HERE' -H 'YOUR-EXTRA-HEADER-2-HERE' sxi.io
For example, send Host header to sxi.io to get HTML response from 18.104.22.168:80, run:
curl -H 'Host: sxi.io' 22.214.171.124:80
This is also useful when 126.96.36.199 has multiple virtual host set. The default is not to response anything when virtual host header is not sent:
$ curl -I 188.8.131.52:80
HTTP/1.1 500 Internal Server Error Server: nginx Date: Wed, 31 Oct 2012 18:51:03 GMT Content-Type: text/html Connection: keep-alive X-Whom: l1-biz-cyber
Now, sent sxi.io as Host header:
$ curl -I -H 'Host: sxi.io' 184.108.40.206:80
HTTP/1.1 200 OK Server: nginx Date: Wed, 31 Oct 2012 18:52:20 GMT Content-Type: text/html Connection: keep-alive X-Whom: l2-com-cyber Vary: Cookie Last-Modified: Wed, 31 Oct 2012 18:48:58 GMT Cache-Control: max-age=98, must-revalidate X-Galaxy: Andromeda-1 X-Origin-Type: DynamicViaDAL
You can use this command to test Apache server node behind a load balancer (only work with your own VLAN/LAN setup):
## see if 192.168.1.11:95 apache node #1 is working or not ## curl -I --header 'Host: sxi.io' 'http://192.168.1.11:95/'
HTTP/1.1 200 OK X-Whom: l1-com-cyber Vary: Cookie Last-Modified: Wed, 31 Oct 2012 18:54:00 GMT Cache-Control: max-age=77, must-revalidate Content-type: text/html Date: Wed, 31 Oct 2012 18:57:43 GMT Server: lighttpd
This option can be used multiple times to add/replace/remove multiple headers:
curl sxi.io -H "Accept-Language: en" -H "Host sxi.io" -H "User-Agent: curl"
See curl command man page for more options:
$ man curl