【问题标题】:Not able to increase the Header size in karaf Jetty无法增加 karaf Jetty 中的标题大小
【发布时间】:2017-04-28 15:30:39
【问题描述】:

我在 karaf Jetty 上运行 REST API,REST 服务使用 JWT 令牌来保证安全。向服务发送请求时,服务器抱怨标头太大。抛出以下异常(Header is too large >8192)。

2017-04-28 10:38:35,461 | DEBUG | tp1430443284-800 | HttpParser                       | 109 - org.eclipse.jetty.util - 9.2.10.v20150310 | URI --> SPACE2
2017-04-28 10:38:35,461 | DEBUG | tp1430443284-800 | HttpParser                       | 109 - org.eclipse.jetty.util - 9.2.10.v20150310 | SPACE2 --> REQUEST_VERSION
2017-04-28 10:38:35,461 | DEBUG | tp1430443284-800 | HttpParser                       | 109 - org.eclipse.jetty.util - 9.2.10.v20150310 | REQUEST_VERSION --> HEADER
2017-04-28 10:38:35,461 | DEBUG | tp1430443284-800 | HttpParser                       | 109 - org.eclipse.jetty.util - 9.2.10.v20150310 | HEADER --> HEADER_VALUE
2017-04-28 10:38:35,461 | DEBUG | tp1430443284-800 | HttpParser                       | 109 - org.eclipse.jetty.util - 9.2.10.v20150310 | HEADER_VALUE --> HEADER_IN_VALUE
2017-04-28 10:38:35,464 | DEBUG | tp1430443284-800 | ChannelEndPoint                  | 109 - org.eclipse.jetty.util - 9.2.10.v20150310 | filled 1887 SelectChannelEndPoint@269ccd27{/10.30.8.29:14179<->8181,Open,in,out,-,-,4/30000,HttpConnection}{io=0,kio=0,kro=1}
2017-04-28 10:38:35,464 | DEBUG | tp1430443284-800 | HttpParser                       | 109 - org.eclipse.jetty.util - 9.2.10.v20150310 | parseNext s=HEADER_IN_VALUE HeapByteBuffer@77e9f1ca[p=0,l=1887,c=8192,r=1887]={<<<NSVhfTU5HUl9HRVRf...0.8.29:8181\r\n\r\n>>>JPTEVfVk1XQVJFX01...T0xFX1NFUlZJQ0V}
2017-04-28 10:38:35,464 | WARN  | tp1430443284-800 | HttpParser                       | 109 - org.eclipse.jetty.util - 9.2.10.v20150310 | Header is too large >8192
2017-04-28 10:38:35,465 | WARN  | tp1430443284-800 | HttpParser                       | 109 - org.eclipse.jetty.util - 9.2.10.v20150310 | badMessage: 413 for HttpChannelOverHttp@548aa950{r=0,c=false,a=IDLE,uri=-}
2017-04-28 10:38:35,465 | DEBUG | tp1430443284-800 | HttpParser                       | 109 - org.eclipse.jetty.util - 9.2.10.v20150310 | 
org.eclipse.jetty.http.HttpParser$BadMessageException
    at org.eclipse.jetty.http.HttpParser.parseHeaders(HttpParser.java:932)[97:org.eclipse.jetty.http:9.2.10.v20150310]
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:1256)[97:org.eclipse.jetty.http:9.2.10.v20150310]
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:250)[106:org.eclipse.jetty.server:9.2.10.v20150310]
    at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540)[98:org.eclipse.jetty.io:9.2.10.v20150310]
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)[109:org.eclipse.jetty.util:9.2.10.v20150310]
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)[109:org.eclipse.jetty.util:9.2.10.v20150310]
    at java.lang.Thread.run(Thread.java:745)[:1.8.0_101]
2017-04-28 10:38:35,465 | DEBUG | tp1430443284-800 | HttpParser                       | 109 - org.eclipse.jetty.util - 9.2.10.v20150310 | HEADER_IN_VALUE --> CLOSED
2017-04-28 10:38:35,465 | DEBUG | tp1430443284-800 | HttpChannelState                 | 109 - org.eclipse.jetty.util - 9.2.10.v20150310 | HttpChannelState@462fabb8{s=IDLE i=true a=null} handling IDLE
2017-04-28 10:38:35,465 | DEBUG | tp1430443284-800 | HttpConnection                   | 109 - org.eclipse.jetty.util - 9.2.10.v20150310 | org.eclipse.jetty.server.HttpConnect

我尝试使用 jetty.xml 上的以下配置来增加 JETTY 的标头大小属性。然而,码头一直抱怨标题大小(标题太大> 8192),更改后有同样的异常。出于某种原因,JETTY 没有使用此配置增加标头大小,有人可以说明如何解决此问题吗?谢谢

<Call name="addConnector">
        <Arg>
            <New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
                <Set name="host">
                    <Property name="jetty.host" />
                </Set>
                <Set name="port">
                    <Property name="jetty.port" default="8181" />
                </Set>
                <Set name="maxIdleTime">300000</Set>
                <Set name="Acceptors">2</Set>
                <Set name="statsOn">false</Set>
                <Set name="confidentialPort">8443</Set>
                <Set name="lowResourcesConnections">20000</Set>
                <Set name="lowResourcesMaxIdleTime">5000</Set>
                <Set name="requestHeaderSize">32768</Set>
                <Set name="headerCacheSize">32768</Set>
            </New>
        </Arg>
    </Call>

经过一番研究,我发现一篇文章指出了 jetty.xml 上的以下配置更改,这是使用 SSL 但是码头中的标头大小仍然没有改变,我得到了同样的错误。

<New id="httpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
    <Set name="secureScheme">https</Set>
    <Set name="securePort">
        <Property name="jetty.secure.port" default="8443" />
    </Set>
    <Set name="outputBufferSize">32768</Set>
    <Set name="requestHeaderSize">32768</Set>
    <Set name="responseHeaderSize">32768</Set>
    <Set name="sendServerVersion">true</Set>
    <Set name="sendDateHeader">false</Set>
    <Set name="headerCacheSize">512</Set>
</New> 

【问题讨论】:

  • Jetty 9.2.10.v20150310 没有org.eclipse.jetty.server.nio.SelectChannelConnector。该配置应该使您的启动完全失败。没有使用你的配置,也许 karaf 有不同的方式来配置自己?
  • 在增加该限制时要小心,因为许多 HTTP 中介(代理、网关、负载平衡器、第 7 层路由器)在 HTTP 标头较大时无法正常工作。
  • 感谢您的建议,我会考虑的。

标签: rest jetty embedded-jetty apache-karaf


【解决方案1】:

经过多日研究找到了解决办法,在以下网址找到解决办法

https://access.redhat.com/documentation/en-us/red_hat_jboss_fuse/6.3/html/security_guide/webconsole

此解决方案增加了请求标头的大小,但使用了 HTTPS。

【讨论】:

  • Afaik karaf 使用 pax web 配置底层码头,您可以在此处找到官方文档:ops4j.github.io/pax/web/6.x/… 我们尝试使用这种方法启用 gzip,但没有成功。
猜你喜欢
  • 1970-01-01
  • 2019-06-04
  • 2016-05-03
  • 1970-01-01
  • 1970-01-01
  • 2012-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多