2013-03-27 47 views
15

這是你如何藏在碼頭8的服務器版本中刪除HTTP Server頭?那麼現在應該看起來像這樣?在碼頭9

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

我知道禁止向服務器發送版本更改此配置,以false不理想的,但我有一個特定的場景,現在我無法避免它。 – Jacob 2013-03-27 23:26:55

+1

爲什麼_sending服務器版本不理想_?我的意思是沒有客戶應該使用它,它可能有安全隱患。在我看來,它應該被禁用默認或我錯過了什麼? – 2015-07-28 14:32:55

+0

服務器標題是絕對使用的,它可能會影響您的搜索排名,也可用於創建技術/瀏覽器流行度圖表,這些圖表經常被某些類型的人員用於制定技術決策。 – Jacob 2015-07-29 09:22:03

回答

22

如果制定了一些代碼,似乎工作。不知道其權利,但至少它的工作原理(:

Server server = new Server(port); 
for(Connector y : server.getConnectors()) { 
    for(ConnectionFactory x : y.getConnectionFactories()) { 
     if(x instanceof HttpConnectionFactory) { 
      ((HttpConnectionFactory)x).getHttpConfiguration().setSendServerVersion(false); 
     } 
    } 
} 
2

現在有一個HttpConfiguration對象,它的設置。

org.eclipse.jetty.server.HttpConfiguration

查找到的jetty.xml有關HTTP配置部分的部分示出了如何設置對象,然後碼頭-http.xml文件,其顯示瞭如何該配置用來。請記住,jetty xml文件實際上只是一個超薄的Java皮膚,並且工作原理基本相同。

http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree/jetty-server/src/main/config/etc/jetty.xml

http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree/jetty-server/src/main/config/etc/jetty-http.xml

+2

我見過這個,但問題是我沒有使用jetty xml文件,我開始嵌入Jetty。 – Jacob 2013-03-27 23:09:29

+0

同樣的事情,只是把它翻譯成相關的Java調用 – 2013-03-27 23:30:13

+2

我已經審查了javadoc和Google搜索...HttpConfiguration類沒有關於如何使用它的文檔。 – Jacob 2013-03-28 05:38:17

23

在碼頭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 }); 
+6

您應該添加最後一步:'server.setConnectors(new Connector [] {httpConnector});'。 – 2014-07-26 13:50:53

+2

爲新連接器設置端口的重要位是:'httpConnector.setPort(port);'。由於默認連接器正在被替換,因此不會使用傳遞給「服務器」構造函數的端口。 – Ben 2016-10-06 15:34:11

1

一些安全分析軟件將標誌向服務器發送版本響應報頭作爲一個問題。

OP一直在尋找解決方案,嵌入式,但如果你的碼頭部署使用server.ini文件,你可以簡單地設置jetty.send.server.version =假

5

如果您使用jetty9作爲獨立服務器,則可以通過在文件start.ini中設置jetty.httpConfig.sendServerVersion=false來禁用服務器簽名。

1

雅各布的解決方案(這爲我工作)的λ-風格的變體:

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)); 
0
jetty9.2

,在start.ini

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