STUDYECRAT Java : Java 9 : HTTP/2 Client
60s
Java Java 9 : HTTP/2 Client
Prove your skills in this interactive quiz
Live Code
Run snippets directly
Timed
60s per question
Scored
Earn 3D badges
★ Java 9 HTTP/2 Client: Key Interview Points
1. Automatic Protocol Negotiation
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com"))
.build();
// Automatically uses HTTP/2 if supported
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com"))
.build();
// Automatically uses HTTP/2 if supported
- Tip: Check protocol with response.version()
- Real Use: Backward compatibility with HTTP/1.1 servers
2. Non-Blocking Async Calls
CompletableFuture<HttpResponse<String>> future =
HttpClient.newHttpClient()
.sendAsync(request, HttpResponse.BodyHandlers.ofString());
future.thenApply(response -> {
System.out.println(response.statusCode());
return response.body();
});
// Chain callbacks without blocking
HttpClient.newHttpClient()
.sendAsync(request, HttpResponse.BodyHandlers.ofString());
future.thenApply(response -> {
System.out.println(response.statusCode());
return response.body();
});
// Chain callbacks without blocking
- Tip: Always handle exceptions with exceptionally()
- Real Use: High-throughput microservice communication
3. Timeout Configuration
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com"))
.timeout(Duration.ofSeconds(5))
.build();
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(3))
.build();
// Separate timeouts for connection and request
.uri(URI.create("https://example.com"))
.timeout(Duration.ofSeconds(5))
.build();
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(3))
.build();
// Separate timeouts for connection and request
- Tip: Timeouts throw HttpTimeoutException
- Real Use: Preventing hung requests in production
4. Custom Headers & Redirects
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com"))
.header("X-Custom-Header", "value")
.header("Accept", "application/json")
.build();
HttpClient client = HttpClient.newBuilder()
.followRedirects(HttpClient.Redirect.NORMAL)
.build();
// Redirect.NEVER to disable automatic redirects
.uri(URI.create("https://example.com"))
.header("X-Custom-Header", "value")
.header("Accept", "application/json")
.build();
HttpClient client = HttpClient.newBuilder()
.followRedirects(HttpClient.Redirect.NORMAL)
.build();
// Redirect.NEVER to disable automatic redirects
- Tip: Use headers().map() to view all headers
- Real Use: API authentication with bearer tokens
5. Response Body Handlers
// String response
HttpResponse<String> strResponse = client.send(
request, HttpResponse.BodyHandlers.ofString());
// Binary response
HttpResponse<byte[]> bytesResponse = client.send(
request, HttpResponse.BodyHandlers.ofByteArray());
// Other handlers: ofInputStream(), ofFile()
HttpResponse<String> strResponse = client.send(
request, HttpResponse.BodyHandlers.ofString());
// Binary response
HttpResponse<byte[]> bytesResponse = client.send(
request, HttpResponse.BodyHandlers.ofByteArray());
// Other handlers: ofInputStream(), ofFile()
- Tip: ofFile() is efficient for large downloads
- Real Use: Streaming API responses directly to files
💡 Pro Interview Tip
When asked about HTTP/2 benefits, highlight multiplexing (multiple requests over single connection), header compression, and server push capabilities - then demonstrate with Java 11's HttpClient API.