See github.com/robaho/httpserver for a more capable fork of the JDK code.
Would love to create a PR to move the core changes back into the JDK but the net-dev folks don’t seem to be interested > On Jan 22, 2024, at 1:18 AM, Alan Bateman <alan.bate...@oracle.com> wrote: > On 21/01/2024 20:18, Ethan McCue wrote: >> Hi all, >> >> Elliot[1] and I have been digging into the HTTP(S) server implementation >> provided by the jdk.httpserver module. >> >> It hasn't taken long to notice that the provided implementation >> is...lacking. Both in performance, as it places extremely low and errors out >> on benchmarks [2][3], and in polish, as doing relatively simple tasks like >> printing out the result of HttpExchange#getRequestHeaders() does not >> actually include the headers in the output. >> >> But, the actual API isn't wretched. The overall design (with a Filter chain >> and a mutable "out" object for responses) is reminiscent of Servlets and >> there is an SPI hook to provide custom server implementations. And unlike >> the jwebserver tool, which is built on this, there isn't a "for education >> purposes only" sign anywhere and it is part of an exported and supposedly >> supported module. >> >> All that is to ask - does anyone on this mailing list have any historical >> context on this? Why was it added to the JDK, what were the goals of its >> implementation, are there any records of the decision process behind its >> design? >> >> Separately is there any appetite for improving the performance of the >> built-in server implementation? > > The history on this is the web services client (meaning JAX-WS), added in > Java 6. A HTTP server was required to support web services "callbacks". > > As it turned out, having a basic HTTP server in the JDK is very useful for > writing tests and very useful at reducing the "getting startup" effort to > serve up a web page. The HTTP server was never meant to be feature rich with > performance on par with other HTTP servers. However, it does have a service > provider interface (SPI) so alternative implementations can be used (there > are at least 3 full featured HTTP servers that implement the SPI). > > More recently, JEP 408 [1] added a command line interface to make it easy to > get started. It also added to the API to make it easy to create and > customize. You've found that so you have some context on what the HTTP server > is intended for now. > > The net-dev mailing list is the mailing list to use. > > -Alan > > [1] https://openjdk.org/jeps/408