The HTTP HEAD
method is used for reading the headers information of a resource returned when accessing it using the HTTP GET
method. Such request can be done before deciding to download a large resource to save bandwidth. The response to a HEAD method should not have a body, in the code below we use the HttpResponse.BodyHandlers.discarding()
, which is a response body handler that discards the response body.
In the code snippet below we start by creating an instance of HttpClient
, in this example we use the HttpClient.newBuilder().build()
method. After creating the HttpClient
we create the HttpRequest
object. We set the HTTP method to HEAD
by calling the method method()
and pass a string “HEAD” as the method name and HttpRequest.BodyPublishers.noBody()
a request body publisher which sends no request body.
The next step in the code below is to send the request and get the response headers from the HttpResponse
object using the headers()
method. The map()
method of the HttpHeaders
object give us a key-values of the headers returned by the server.
package org.kodejava.httpclient;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpHeaders;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class HeadRequestExample {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newBuilder().build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://google.com"))
.method("HEAD", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<Void> response = client.send(request,
HttpResponse.BodyHandlers.discarding());
// Returns an unmodifiable multi-map view of this HttpHeaders.
// The map contains key of string, with list of strings as
// its value.
HttpHeaders headers = response.headers();
headers.map().forEach((key, values) ->
System.out.printf("%s = %s%n", key, values));
}
}
Here are the HTTP headers we got and printed out to the console screen:
:status = [301]
alt-svc = [quic=":443"; ma=2592000; v="46,43",h3-Q050=":443"; ma=2592000,h3-Q049=":443"; ma=2592000,h3-Q048=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,h3-T050=":443"; ma=2592000]
cache-control = [public, max-age=2592000]
content-length = [220]
content-type = [text/html; charset=UTF-8]
date = [Wed, 22 Apr 2020 14:41:49 GMT]
expires = [Fri, 22 May 2020 14:41:49 GMT]
location = [https://www.google.com/]
server = [gws]
x-frame-options = [SAMEORIGIN]
x-xss-protection = [0]