为什么HttpContext接受所有以指定路径开头的URI的请求?

时间:2019-06-07 05:05:17

标签: java http java-11 com.sun.net.httpserver

我有一个运行以下Java版本的Java应用程序

$ java -version
java version "11.0.3" 2019-04-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.3+12-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.3+12-LTS, mixed mode)

我正在研究使用Java中的内置HttpServer,并注意到带有path=/foo的HttpContext会接受对以所述路径开头的uri的请求,例如/foo123 /foobar /fooxxx

public class IsThisABug {

    public static void main(String[] args) throws IOException {
        HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0);
        server.createContext("/context",IsThisABug::handleRequest);
        server.start();
        System.out.println("Server listening on " + server.getAddress());
    }


    private static void handleRequest(HttpExchange exchange) throws IOException {
        URI requestURI = exchange.getRequestURI();
        String response = "Hello From handleRequest: " + requestURI;
        System.out.println(response);
        exchange.sendResponseHeaders(200, response.getBytes().length);
        OutputStream os = exchange.getResponseBody();
        os.write(response.getBytes());
        os.close();
    }
}

如果我进入邮递员并向localhost:8080/context发送GET请求,则在终端窗口中会看到以下输出:

Hello From handleRequest: /context

如果我向/contextBar发送请求,则会看到以下输出

Hello From handleRequest: /contextBar

我已经简要地研究了使用import com.sun.net.httpserver.Filter作为拒绝进入我的/context端点的任何杂项请求的一种方法,但是我不明白为什么这是必要的。

有人知道为什么会这样吗?

0 个答案:

没有答案