【问题标题】:Hide server version from header in jetty从码头的标题中隐藏服务器版本
【发布时间】:2021-10-28 11:00:34
【问题描述】:

我知道 config.setSendServerVersion(false);应该从 Header 隐藏服务器版本。

但即使我调试代码进入也没有发生

    public void setSendServerVersion(boolean sendServerVersion) {
        this._sendServerVersion = sendServerVersion;
    }

发现 sendServerVersion 始终为真,即使我们传递的是假。

我是这样称呼的

    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
    .
    .
    .

【问题讨论】:

  • 你是如何使用 HttpConfiguration 的?它应该通过特定的 ConnectionFactory 传递到特定的 ServerConnector。
  • 在调用此代码块之前,展示如何创建和配置Server 对象。

标签: eclipse jetty embedded-jetty


【解决方案1】:

配置公共响应标头肯定是使用HttpConfiguration 完成的,但它必须绑定到特定的ServerConnector 才能使该配置产生任何影响。

举个例子。

jetty-project/embedded-jetty-cookbook 上作为HttpConfigExample 提供

注意embedded-jetty-cookbook上的分支,有jetty-9.4.xjetty-10.0.xjetty-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.

【讨论】:

    猜你喜欢
    • 2020-04-26
    • 2020-11-09
    • 2011-09-24
    • 1970-01-01
    • 2020-02-05
    • 2021-10-09
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    相关资源
    最近更新 更多