Java 删除Jetty 9中的HTTP服务器头

Java 删除Jetty 9中的HTTP服务器头,java,jetty,Java,Jetty,这就是在Jetty 8中隐藏服务器版本的方式: Server server = new Server(port); server.setSendServerVersion(false); 你在9号码头怎么做?那么现在应该是这样的 HttpConfiguration config = new HttpConfiguration(); config.setSendServerVersion(false); //TODO: Associate config with server??? Server

这就是在Jetty 8中隐藏服务器版本的方式:

Server server = new Server(port);
server.setSendServerVersion(false);
你在9号码头怎么做?那么现在应该是这样的

HttpConfiguration config = new HttpConfiguration();
config.setSendServerVersion(false);
//TODO: Associate config with server???
Server server = new Server(port);

现在有一个带有该设置的HttpConfiguration对象

org.eclipse.jetty.server.HttpConfiguration

查看jetty.xml,查看http配置部分,该部分显示如何设置对象,然后查看jetty-http.xml文件,该文件显示如何使用该配置。请记住,jetty xml文件实际上只是java上的一层薄皮,其工作原理基本相同


如果你能写出一些似乎有效的代码。不确定它是否正确,但至少它有效(:


在Jetty 9中,您需要在HttpConfiguration上对其进行配置:

HttpConfiguration httpConfig = new HttpConfiguration();
httpConfig.setSendServerVersion( false );
HttpConnectionFactory httpFactory = new HttpConnectionFactory( httpConfig );
ServerConnector httpConnector = new ServerConnector( server,httpFactory );
server.setConnectors( new Connector[] { httpConnector } );

某些安全分析软件会在响应头中将发送服务器版本标记为问题


OP正在寻找嵌入式的解决方案,但是如果Jetty部署使用server.ini文件,您可以简单地设置Jetty.send.server.version=false

如果将jetty9用作独立服务器,您可以通过在文件
start.ini
中设置
Jetty.httpConfig.sendServerVersion=false
禁用服务器签名-雅各布解决方案的风格变体(对我有效):


jetty9.2
中,在
start.ini中将此配置更改为
false

# should jetty send the server version header?
jetty.send.server.version=true

我已经看到了这一点,但问题是我没有使用jetty xml文件,我正在启动jetty embedded。同样,只要将它翻译成相关的java调用我已经查看了javadoc并用谷歌搜索了它…HttpConfiguration类没有关于如何使用它的文档。jetty.xml只不过是java I上的一小部分xml而已tself,它在java中的工作方式与在xml中的工作方式完全相同…我们必须向embedded examples项目添加一个示例我想我知道禁用发送服务器版本并不理想,但我有一个具体的场景,我现在无法避免。为什么发送服务器版本不理想?我的意思是,无论如何,没有客户端应该使用它,而且它可能会ave安全含义。我认为默认情况下应该禁用它,还是我遗漏了什么?肯定使用了服务器标题,它可能会影响您的搜索排名,还用于创建技术/浏览器流行度图,某些类型的人经常使用这些图来做出技术决策。哦,我明白了,出于统计目的,是的,这是有道理的。但是,为什么它会影响搜索排名?我知道发送服务器版本没有多大意义,但似乎隐藏它也没有多大意义。我看到的唯一论点是“为了安全”,但攻击者难道不会像对任何其他攻击一样尝试所有已知的攻击吗?您应该添加最后一步:
server.setConnectors(新连接器[]{httpConnector});
。为新连接器设置端口的重要一点是:
httpConnector.setPort(端口);
。由于正在替换默认连接器,因此未使用传递给
服务器的端口
构造函数。这仅适用于
服务器.start()之前
因为在启动过程中配置会传播到许多其他组件。此时对连接器的更改不再有影响。另外请注意,只有在
server.start()之前使用时才有效。
final Server server = new Server(port);
Stream.of(server.getConnectors()).flatMap(connector -> connector.getConnectionFactories().stream())
            .filter(connFactory -> connFactory instanceof HttpConnectionFactory)
            .forEach(httpConnFactory -> ((HttpConnectionFactory)httpConnFactory).getHttpConfiguration().setSendServerVersion(false));
# should jetty send the server version header?
jetty.send.server.version=true