Skip to content

ResourceServlet Download link broken #13922

@luxiao0000

Description

@luxiao0000

Jetty version(s)
12.1.0~12.1.3

Jetty Environment
ee10, ee11

HTTP version
HTTP1.1

Java version/vendor (use: java -version)
openjdk version "21.0.2" 2024-01-16 LTS
OpenJDK Runtime Environment Temurin-21.0.2+13 (build 21.0.2+13-LTS)
OpenJDK 64-Bit Server VM Temurin-21.0.2+13 (build 21.0.2+13-LTS, mixed mode)

OS type/version
macos

Description
Using the Resource Servlet to provide the download service, if the client can complete the download within 30 seconds (not necessarily exactly 30 seconds, usually a little over 30 seconds), there is no problem. If it exceeds 30 seconds, an error will occur. This issue exists in version 12.1.x, but not in 12.0.29

How to reproduce?
java code

        <dependency>
            <groupId>org.eclipse.jetty.ee10</groupId>
            <artifactId>jetty-ee10-servlet</artifactId>
            <!--            <version>12.1.3</version>-->
            <version>12.1.0</version>
            <!--            <version>12.0.29</version>-->
        </dependency>

import org.eclipse.jetty.ee10.servlet.ResourceServlet;
import org.eclipse.jetty.ee10.servlet.ServletContextHandler;
import org.eclipse.jetty.ee10.servlet.ServletHolder;
import org.eclipse.jetty.server.HttpConfiguration;
import org.eclipse.jetty.server.HttpConnectionFactory;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.util.thread.QueuedThreadPool;

import java.nio.file.Files;
import java.nio.file.Path;

public class Main {

    public static void main(String[] args) throws Exception {

        Server server = new Server(new QueuedThreadPool() {{
            setMaxThreads(10);
            setName("jetty-pt");
        }});

        HttpConnectionFactory httpConnectionFactory = new HttpConnectionFactory(new HttpConfiguration() {{
            setSendServerVersion(false);
            setIdleTimeout(30000000);
        }});

        server.addConnector(new ServerConnector(server, httpConnectionFactory) {{
            setPort(9080);
            setIdleTimeout(30000000);
        }});

        server.setHandler(new ServletContextHandler("/") {{
            addServlet(new ServletHolder("default", ResourceServlet.class) {{
                setInitParameter("dirAllowed", "false");
            }}, "/download/*");
            setBaseResourceAsPath(Files.createDirectories(Path.of("download")));
        }});

        server.start();
    }

}

wget

➜  ~ wget --limit-rate=100k http://127.0.0.1:9080/download/test.txt -O /dev/null

--2025-10-29 09:32:10--  http://127.0.0.1:9080/download/test.txt
Connecting to 127.0.0.1:9080... connected.
HTTP request sent, awaiting response... 200 OK
Length: 22032000 (21M) [text/plain]
Saving to: '/dev/null'

/dev/null                          17%[=========>                                                  ]   3.70M   101KB/s    in 38s     

2025-10-29 09:32:47 (100 KB/s) - Connection closed at byte 3877548. Retrying.

--2025-10-29 09:32:48--  (try: 2)  http://127.0.0.1:9080/download/test.txt
Connecting to 127.0.0.1:9080... connected.
HTTP request sent, awaiting response... 206 Partial Content
Length: 22032000 (21M), 18154452 (17M) remaining [text/plain]
Saving to: '/dev/null'

/dev/null                          18%[++++++++++>                                                 ]   3.98M  99.8KB/s               ^C


Metadata

Metadata

Assignees

Labels

BugFor general bugs on Jetty side

Type

No type

Projects

Status

✅ Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions