Photo by Magda Ehlers on Pexels.com

In the realm of Rest API and their communication , one of the most important feature or concept is the use of HTTP verbs. If you do not know about what the HTTP verbs are, I would highly suggest you to go through this link that talks about the different HTTP verbs like GET, POST etc.

One of the lesser used and known HTTP verb is the HEAD request. I write lesser used because I’ve seen the implementation of this method being one of the very few places – both in my projects and also else where. There are teams where very experienced folks are not aware of what HEAD request is and what feature it brings to the table.

So let’s talk about this today.

HEAD REQUEST

The HEAD request method is similar to the GET method, but it only returns the header information of a resource. As per the MDN definition –

The HTTP HEAD method requests the headers that would be returned if the HEAD request’s URL was instead requested with the HTTP GET method. 

The server will not return the body of the resource, only the HTTP headers. A HEAD request should not have a response body associated with it. If there is any associated response body anyways, then it must be ignored.

The response to a HEAD request will include the same headers as a GET request, but without the actual content. As such HEAD inherits some of the properties of the GET requests – like

  • A HEAD request is a SAFE method.
  • A HEAD request is idempotent.
  • A HEAD request is cacheable.

SYNTAX

The HEAD request syntax almost looks identical to the GET request syntax

So Why Use HEAD?

This has been asked in so many times in the architecture calls and I’ve seen this in so many LinkedIn comments too, as to what is the use of the HEAD call when we already have a GET call.

Let’s see some scenarios where making a HEAD call is more beneficial then using the default GET call.

  • Check if a resource is available

One common use of the HEAD request is to check if a resource is available on server. Since there is no overhead of the response body, a simple HEAD call with 200 status would confirm if the resource actually exists on the server.

For example, a web crawler might use a HEAD request to check if a website/ webpage is online before attempting to scrape its content. If the server returns a 200 OK status code, it means the website/webpage is available.

  • Checking Resource Modification Date

Another use of the HEAD request is to check when a resource was last modified. The server can include the Last-Modified header in the response to a HEAD request, which contains the date and time when the resource was last modified. This information can be used to determine if a cached version of the resource is still valid.

  • Getting Resource Size

The HEAD request can also be used to determine the size of a resource. The server can include the Content-Length header in the response to a HEAD request, which contains the size of the resource in bytes. This information can be useful in situations where the client needs to allocate memory to store the resource.

Another example of this is, if a URL might produce a large download, a HEAD request could read its Content-Length header to check the file-size without actually downloading the file. This can be helpful to put restrictions on the size of file to be downloaded on a system – if there is a requirement.

  • Checking Authorization

The HEAD request can be used to check if a client is authorized to access a resource, without having the need to access the resource. The server can include the WWW-Authenticate header in the response to a HEAD request, which contains information on how to authenticate with the server.

This can be useful in situations where a client needs to check if it has permission to access a resource before attempting to access it.

  • Reducing Network Overhead

The HEAD request can also be used to reduce network overhead. This can be helpful in situations when the only the information about the state of a resource is needed. In those situations, using a HEAD request instead of a GET request can save bandwidth and processing time.

As you can see from the above points, all-though small, there is a case where we can use the HEAD request to our own benefit. In most cases, when you don’t want the overhead of the response from the GET request, then you can use the HEAD request.