【问题标题】:Jersey/Grizzly POST fails for large URI大 URI 的 Jersey/Grizzly POST 失败
【发布时间】:2013-07-25 12:14:49
【问题描述】:

相关:thisthat

我正在开发一个 POST 网络服务(jersey/grizzly,仅用于研究目的),它应该能够处理大型 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));

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

【问题讨论】:

    标签: java rest http-headers jersey grizzly


    【解决方案1】:

    问题是 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

    【讨论】:

    • 太棒了!谢谢阿列克谢!但是现在有没有办法在不创建我自己的类的情况下做到这一点? (因为这不是更新证明:()
    • 嗨丹尼尔,我理解你的担心,但不幸的是我现在看不到其他方法。您可以提交 Jersey 问题并要求 Jersey 人扩展标准 GrizzlyServerFactory 功能。
    【解决方案2】:

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

    您可以在此处阅读更多信息:What is the maximum length of a URL in different browsers?

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

    【讨论】:

    • 抱歉,这没有帮助。我没有使用浏览器。而且我只能像 jersey 想要的那样调用 web 服务。
    • 但是您的服务器仍然有可能无法处理这么长的 URI。请尝试使用较短的 URI 并向我们提供反馈。我提供的链接中还提供了有关服务器(和最大 URI 大小)的指导。
    【解决方案3】:

    您无需现在就可以创建 grizzly http 服务器

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-02-01
      • 1970-01-01
      • 2011-01-05
      • 1970-01-01
      • 2013-09-09
      • 2018-01-28
      • 2013-11-14
      • 1970-01-01
      • 2011-08-28
      相关资源
      最近更新 更多