On Sat, 1 Nov 2025 14:26:27 GMT, Peyang <[email protected]> wrote:

>> 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
>
> Peyang has updated the pull request incrementally with one additional commit 
> since the last revision:
> 
>   Allow unlimited splits when parsing HTTP Range header to detect trailing 
> commas

Changes requested by [email protected] (no known OpenJDK username).

src/jdk.httpserver/share/classes/sun/net/httpserver/simpleserver/FileServerHandler.java
 line 344:

> 342:             try {
> 343:                 if (startStr.isEmpty()) {  // "-<suffix-length>"
> 344:                     long suffixLength = Long.parseLong(endStr, 10);

`Long.parseLong(endStr)` already parses in base 10, there's no need to be 
explicit about it. See the JDK code:

    public static long parseLong(String s) throws NumberFormatException {
        return parseLong(s, 10);
    }

test/jdk/com/sun/net/httpserver/simpleserver/FileServerHandlerTest.java line 
147:

> 145: 
> 146:                 // malformed numbers or format
> 147:                 {"bytes=-0"}, {"bytes=meow"}, {"bytes=--500"}, 
> {"bytes=500"}, {"bytes=-"}, {"bytes=+500-600"},

Please add a test for `bytes=400--500` which uses a code path not covered by 
existing tests.
Also worth adding `bytes=500-+600` and variations with `+` in all possible 
positions, and omitting left part.
Add also `bytes=--`, `bytes=-+1`, ... I'm sure one could come up with more.

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

PR Review: https://git.openjdk.org/jdk/pull/28021#pullrequestreview-3408865320
PR Review Comment: https://git.openjdk.org/jdk/pull/28021#discussion_r2484900851
PR Review Comment: https://git.openjdk.org/jdk/pull/28021#discussion_r2484909654

Reply via email to