Почему HttpContext принимает запросы от всех URI, начинающихся с указанного пути? - PullRequest
1 голос
/ 07 июня 2019

У меня есть 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)

Я пытался использовать встроенный HttpServer, который находится в Java, и заметил, что HttpContext с path=/foo будет приниматьзапросы к началу 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();
    }
}

Если я захожу в почтальон и отправляю запрос GET на localhost:8080/context, то в окне терминала наблюдается следующий вывод:

Hello From handleRequest: /context

И если я отправляю запрос на /contextBar виден следующий вывод

Hello From handleRequest: /contextBar

Я кратко рассмотрел использование import com.sun.net.httpserver.Filter в качестве средства отклонения любых случайных запросов, поступающих в мою конечную точку /context, но я не понимаю, почему это должно бытьнеобходимо.

Кто-нибудь знает, почему это происходит?

...