> Docs > Http Server > Tunnel

Tunnel

HttpServer can support the CONNECT method for establishing tunnels, which is most often used for HTTPS tunneling.

The CONNECT method is not enabled by default; the application needs to add it to supportedMethods first

server.conf().supportedMethods("CONNECT", "GET", "HEAD" ... );

In the HttpHandler, the application needs to examine each CONNECT request and decide whether to allow the tunneling, based on criteria like client IP, target host:port. The target host:port is specified by request.host() .

To grant the tunneling request, return a response with a 2xx status code; the server will then establish a tunnel between the client and the target. To deny the tunneling request, return a response with a status code that's not 2xx .

HttpHandler handler = request-> { if(request.method().equals("CONNECT")) // a tunneling request { if(isAllowed(request)) return HttpResponse.text(200, "tunneling request granted"); else return HttpResponse.text(403, "tunneling request denied"); } ... }; HttpServer server = new HttpServer(handler);

See also _HttpProxy.java for a simple HTTP+HTTPS proxy demo.