1

相关:这个那个

我正在开发一个 POST 网络服务(球衣/灰熊,仅用于研究目的),它应该能够处理大型 URI。但是,如果 URI 超过 8000 个字符,我会收到 400 Bad Request Exception 并且没有进一步的解释。我调试/跟踪它到 grizzly maxHttpHeaderSize 属性。我试图设置这个属性但失败了。这是我启动服务器和请求的方式:

GrizzlyServerFactory.createHttpServer(BASE_URI, new PackagesResourceConfig("org.test"));

JSONObject s = new JSONObject(webResource.queryParams(queryParams).post(String.class));

谢谢您的帮助!干杯,丹尼尔

4

3 回答 3

2

问题是 GrizzlyServerFactory 返回已经启动的 HttpServer,这就是为什么您不能即时重新配置它的原因。在这里 [1] 我创建了 GrizzlyServerFactory 的副本,它不会启动 HttpServer,因此代码如下:

    HttpServer httpServer = GrizzlyServerFactory.createHttpServer(BASE_URI, rc);
    httpServer.getListener("grizzly").setMaxHttpHeaderSize(Integer.MAX_VALUE);

    // don't forget to start the server explicitly
    httpServer.start();

希望这会有所帮助。

[1] https://github.com/oleksiys/samples/blob/master/jersey-grizzly2-ext/src/main/java/com/sun/jersey/api/container/grizzly2/ext/GrizzlyServerFactory.java

于 2013-07-25T20:40:50.467 回答
0

您是否尝试过使用较短的 URI?可能您的服务器无法处理这么长的 URI。

您可以在此处阅读更多相关信息:不同浏览器中 URL 的最大长度是多少?

为什么不将请求数据从 URL 放到请求正文?

于 2013-07-25T13:48:45.120 回答
0

您无需立即启动即可创建 grizzly http 服务器

public static HttpServer createHttpServer(
     final URI uri, 
     final ResourceConfig configuration, 
     final boolean start)

所以基本上你创建它通常传递 false 作为第三个参数。

当您取回 HttpServer 对象时,您可以httpServer.getListener("grizzly").setMaxHttpHeaderSize(Integer.MAX_VALUE); 如前所述,不要忘记手动启动服务器。

于 2017-06-30T07:34:54.770 回答