Hi all,

[JEP 408](https://openjdk.org/jeps/408) introduced the Simple Web Server in 
Java 18, providing a minimal webserver for serving static files over HTTP.

[RFC 9110](https://www.rfc-editor.org/rfc/rfc9110.html#name-range-requests) 
defines "Range Requests" as an optional feature that allows clients to request 
a subset of a resource's content. Supporting Range requests in the context of 
JDK's Simple Web Server means enabling the server to serve only the requested 
portion of a static file.

This change contains:

1. Enhances `sun.net.httpserver.simpleserver.FileServerHandler` in the 
`jdk.httpserver` module to support `Range` and `If-Range` headers.
2. Calculates an `ETag` for each resource based on its last-modified date and 
file size and sends it to the client on demand for use with the `If-Range` 
header.
3. Returns the `Accept-Ranges` header for all file retrievals, and 
`Content-Range` when a client requests a specific range.
4. Adds a new constant `HTTP_RANGE_NOT_SATISFIABLE` to the `Codes` class to 
indicate invalid ranges.
5. Returns `206 Partial Content` for valid ranges and `416 Range Not 
Satisfiable` for invalid ranges.
6. Includes corresponding tests to verify correct behavior.

This enhancement was motivated by recent discussions on the net-dev mailing 
list, which requested support for Range requests along with example use cases: 
https://mail.openjdk.org/pipermail/net-dev/2025-April/026364.html
It was also discussed briefly on the net-dev mailing list: 
https://mail.openjdk.org/pipermail/net-dev/2025-October/028586.html

-------------

Commit messages:
 - Fix HTTP Range header handling by validating end range and updating test 
cases
 - Fix ETag generation by removing weak validator prefix
 - Implement ETag and If-Range support
 - Change the content of the test file due to easier understanding
 - Adding test for ETag and If-Range header support
 - 8355572: Implement HTTP Range header support in FileServerHandler.serveFile()
 - Add tests for FileServerHandler
 - Add HTTP_RANGE_NOT_SATISFIABLE(416) to HTTP response code constants

Changes: https://git.openjdk.org/jdk/pull/28021/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=28021&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8355572
  Stats: 353 lines in 3 files changed: 345 ins; 5 del; 3 mod
  Patch: https://git.openjdk.org/jdk/pull/28021.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/28021/head:pull/28021

PR: https://git.openjdk.org/jdk/pull/28021

Reply via email to