import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; public class LongResponseHeaderDemoServer { public static void main(String[] args) throws Exception { int port = args.length == 0 ? 3000 : Integer.parseInt(args[0]); System.err.println("Listening on port " + port + "..."); System.err.println(); try (ServerSocket server = new ServerSocket(port); Socket sock = server.accept(); BufferedReader in = new BufferedReader(new InputStreamReader(sock.getInputStream())); PrintStream out = new PrintStream(sock.getOutputStream())) { // Read the request and print to stderr... System.err.println("Reading request..."); for (String line = in.readLine(); !line.isEmpty(); line = in.readLine()) { System.err.println(line); } System.err.println(); // Write the response to the socket... System.err.println("Writing response..."); out.println("HTTP/1.1 200 OK"); out.println("Content-Type: text/plain"); out.println("Connection: close"); out.println("Content-Length: 3"); // This is an endless header. out.print("X-Long-Header: "); while (true) { // Dump 16K to the socket for every iteration out.print("abcdefghijklmnop".repeat(1024)); out.flush(); if (false) { // Appease the compiler... break; } } // We won't ever reach here... out.println(); // End the header section out.println(); // Print the body out.print(new byte[] {'O', 'K', '\n'}); } } }