#eclipse #jetty #embedded-jetty
Вопрос:
Я знаю config.setSendServerVersion(false); должен скрыть версию сервера из заголовка.
Но этого не происходит, даже если я отлаживаю код, в который попадаю
public void setSendServerVersion(boolean sendServerVersion) {
this._sendServerVersion = sendServerVersion;
}
И обнаружил, что sendServerVersion всегда true, даже если мы передаем false.
Вот как я звоню
HttpConfiguration http_config = new HttpConfiguration();
http_config.setOutputBufferSize(32768);
http_config.setSendServerVersion(false);
Может кто-нибудь помочь мне с тем, как удалить сервер заголовка?
Content-Type: text/html;charset=utf-8
Date: Thu, 28 Oct 2021 10:57:29 GMT
Server: Jetty(9.4.42.v20210604)
Strict-Transport-Security: max-age=31556926; includeSubDomains
Transfer-Encoding: chunked
.
.
.
Комментарии:
1. Как вы используете HttpConfiguration? Он должен быть передан в конкретный ServerConnector через определенный ConnectionFactory.
2. Покажите, как вы создаете и настраиваете
Server
объект перед вызовом этого блока кода.
Ответ №1:
Настройка общих заголовков ответов, безусловно, выполняется с HttpConfiguration
помощью , но она должна быть привязана к конкретному ServerConnector
, чтобы эта конфигурация оказала какое-либо влияние.
Возьмем этот пример.
Доступно в jetty-project / embedded-jetty-cookbook как HttpConfigExample
Обратите внимание на ветку на embedded-jetty-cookbook, так как там есть примеры для jetty-9.4.x
, jetty-10.0.x
, а также jetty-11.0.x
package org.eclipse.jetty.cookbook;
import java.io.IOException;
import java.net.URI;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jetty.client.HttpClient;
import org.eclipse.jetty.client.api.ContentResponse;
import org.eclipse.jetty.server.HttpConfiguration;
import org.eclipse.jetty.server.HttpConnectionFactory;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.handler.AbstractHandler;
import org.eclipse.jetty.util.component.LifeCycle;
public class HttpConfigExample
{
public static void main(String[] args) throws Exception
{
Server server = new Server();
HttpConfiguration httpConfigOff = new HttpConfiguration();
httpConfigOff.setSendDateHeader(false);
httpConfigOff.setSendServerVersion(false);
httpConfigOff.setSendXPoweredBy(false);
ServerConnector connectorOff = new ServerConnector(server, new HttpConnectionFactory(httpConfigOff));
connectorOff.setPort(9090);
server.addConnector(connectorOff);
HttpConfiguration httpConfigDefault = new HttpConfiguration();
ServerConnector connectorDefault = new ServerConnector(server, new HttpConnectionFactory(httpConfigDefault));
connectorDefault.setPort(9191);
server.addConnector(connectorDefault);
server.setHandler(new AbstractHandler()
{
@Override
public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
{
response.setCharacterEncoding("utf-8");
response.setContentType("text/plain");
response.getWriter().println("Greetings.");
baseRequest.setHandled(true);
}
});
HttpClient client = new HttpClient();
try
{
client.start();
server.start();
// Let's show what the default Response headers look like.
dumpResponse("Default Response", client.GET(URI.create("http://localhost:9191/")));
// Let's show what the default Response headers look like.
dumpResponse("Configured Response", client.GET(URI.create("http://localhost:9090/")));
}
finally
{
LifeCycle.stop(server);
LifeCycle.stop(client);
}
}
private static void dumpResponse(String heading, ContentResponse response)
{
System.out.printf("--- %s ---%n", heading);
System.out.printf("Request to %s%n", response.getRequest().getURI());
System.out.printf("Response: %s %d %s%n", response.getVersion(), response.getStatus(), response.getReason());
System.out.println(response.getHeaders());
System.out.println(response.getContentAsString());
}
}
Это настраивает 2 ServerConnector
объекта …
- По умолчанию используется порт 9191
HttpConfiguration
- На порту 9090 настроен (некоторые общие заголовки ответов отключены)
HttpConfiguration
Если мы сделаем простой запрос к обоим портам, мы сможем увидеть результаты…
--- Default Response ---
Request to http://localhost:9191/
Response: HTTP/1.1 200 OK
Date: Thu, 28 Oct 2021 13:22:41 GMT
Content-Type: text/plain;charset=UTF-8
Content-Length: 11
Server: Jetty(9.4.44.v20210927)
Greetings.
--- Configured Response ---
Request to http://localhost:9090/
Response: HTTP/1.1 200 OK
Content-Type: text/plain;charset=UTF-8
Content-Length: 11
Greetings.