Blog

03/06/2019

Linux / Unix: curl Command Pass Host Headers



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 75.126.153.206:80, run:

curl -H 'Host: sxi.io' 75.126.153.206:80

This is also useful when 75.126.153.206 has multiple virtual host set. The default is not to response anything when virtual host header is not sent:
$ curl -I 75.126.153.206:80
Sample outputs:

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' 75.126.153.206:80
Sample outputs:

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/'

Sample outputs:

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"
References

See curl command man page for more options:
$ man curl

Posted by: SXI ADMIN

The author is the creator of nixCraft and a seasoned sysadmin, DevOps engineer, and a trainer for the Linux operating system/Unix shell scripting. Get the latest tutorials on SysAdmin, Linux/Unix and open source topics via RSS/XML feed or weekly email newsletter.

20/08/2019

Start your Bitcoin Exchange with our Software

Start your Bitcoin Exchange with our Software Setup your white label bitcoin exchange right away. Or create your own cryptocurrency using...
14/08/2019

How to KVM, QEMU start or stop virtual machine from command line (CLI)

KVM or Kernel Based Virtual Machine is a popular virtualization technology. It allows you to run virtual guest machines over a host machine. To start...
14/08/2019

How to Docker backup Saving and restoring your volumes

Running a Docker volume backup First, we spin up a temporary container, and we mount the backup folder and the target Docker volume to this container....