【问题标题】:Removing "TooLongFrameException" restrictions (http)删除“TooLongFrameException”限制 (http)
【发布时间】:2018-04-26 13:19:46
【问题描述】:

我正在使用 selenium 和 browsermob-proxy,最终由“netty-all”提供支持,以访问一个网站(在我的控制之外),该网站提供了大量的标头作为其身份验证过程的一部分。代理因网络错误而失败:

io.netty.handler.codec.TooLongFrameException: HTTP header is larger than 16384 bytes., version: HTTP/1.1

我需要从 netty-alljar 中删除我的 browsermob-proxy 所依赖的所有此类限制,可扩展性、性能和内存节省与此用例无关。

克隆了 repo,我改变了:

  • DEFAULT_MAX_FRAME_SIZE in WebSocket00FrameDecoder (io.netty.handler.codec.http.websocketx)

  • HttpObjectDecoderio.netty.handler.codec.http中的默认构造函数

在适当的情况下发送至Integer.MAX_VALUE

但是,即使使用这些新设置,它仍然会在使用中不断抛出“HTTP 标头大于 16384 字节”。

  1. 这个 16384 限制还能从哪里来?
  2. 如何在保留完整功能的同时删除它(以可接受的效率/内存使用成本等)

【问题讨论】:

  • 请添加完整的 stracktrace

标签: selenium http netty browsermob-proxy


【解决方案1】:

到达解决方案,它远非优雅,但它有效 - 我的用例效率低/容错,因此请谨慎使用。

  1. 我不会用 Maven 恶作剧来污染这个答案,因为它们并不是严格相关的,但是,请注意 netty-all 默认情况下会从 Maven 存储库中提取其所有组件。要更改 netty-all 内部结构,您需要生成一个所需组件的 jar(在本例中为 handler.codec.http),然后更改 pom.xml 以拉入您修改后的 jar。有几种方法可以做到这一点,唯一对我有用的是使用mvn install 将 jar 放在本地 .m2 存储库中:

    mvn install:install-file -Dfile=netty-codec-http-4.1.25.Final-SNAPSHOT.jar -DgroupId=io.netty -DartifactId=netty-codec-http -Dversion=4.1.25.Final-SNAPSHOT -Dpackaging=jar

    然后构建netty-all 以获得最终的jar,然后您可以在自己的项目中使用它而不是原来的。

  2. 修改文件以从 http 操作中删除大小限制:

    • 全部/pom.xml
    • 编解码器-http/pom.xml
    • codec-http/src/main/java/io/netty/handler/codec/http/HttpObjectDecoder.java
    • codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocket00FrameDecoder.java
    • codec-http/src/test/java/io/netty/handler/codec/http/HttpRequestDecoderTest.java
    • codec-http/src/test/java/io/netty/handler/codec/http/HttpResponseDecoderTest.java
  3. 除了对 Integer.MAX_VALUE 设置各种大小限制外,我还注释掉了相关测试,以确保 Maven “package”命令成功生成 jar。

  4. 更改的git diff 可在此处获得:

    https://gist.github.com/granite-zero/723fa55ae628494ff9b833dde1973a00

    您可以将它作为补丁应用到 netty commit 04fac00c8c98ed26c5a75887c8e7e53b1e1b68d0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 2018-11-05
    • 2017-06-27
    • 2020-06-03
    • 2021-07-24
    • 1970-01-01
    相关资源
    最近更新 更多