Снятие ограничений «TooLongFrameException» (http) - PullRequest
0 голосов
/ 26 апреля 2018

Я использую selenium с browsermob-proxy, который в конечном итоге работает на «netty-all», для доступа к сайту (вне моего контроля), который предлагает огромные заголовки в рамках процесса аутентификации. Прокси не работает с ошибкой netty:

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

Мне нужно удалить все такие ограничения из netty-all jar, от которых зависит мой прокси-сервер-браузер, масштабируемость, производительность и сохранение памяти в данном случае использования не имеют значения.

Клонировав репо, я изменил:

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

  • HttpObjectDecoder конструктор по умолчанию в io.netty.handler.codec.http

до Integer.MAX_VALUE, где это необходимо.

Однако даже с этими новыми настройками он продолжает выбрасывать «HTTP-заголовок размером более 16384 байт».

  1. Откуда еще может быть этот предел в 16384?
  2. Как его удалить, сохранив полную функциональность (при приемлемой стоимости для эффективности / использования памяти и т. Д.)

1 Ответ

0 голосов
/ 27 апреля 2018

Пришло решение, оно далеко от элегантного, но оно работает - мой вариант использования неэффективен / отказоустойчив, поэтому используйте с осторожностью.

  1. Я не буду загрязнять этот ответ феноменами Maven, поскольку они не являются строго релевантными, однако, обратите внимание, что netty-all по умолчанию извлекает все его компоненты из репозитория Maven. Чтобы изменить netty-all внутренности, вам нужно будет создать банку необходимого компонента (в данном случае handler.codec.http), затем измените pom.xml, чтобы вытащить вашу модифицированную банку. Есть несколько способов сделать это, единственный, который работал для меня, использовал mvn install, чтобы поместить банку в локальный репозиторий .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, чтобы получить финальную банку, которую вы затем используете в своем собственном проекте вместо оригинала.

  2. Файлы, измененные для удаления ограничений размера из операции http:

    • все / pom.xml
    • Кодек-HTTP / pom.xml
    • Кодек-HTTP / SRC / главная / Java / И.О. / Нетти / обработчик / Кодек / HTTP / HttpObjectDecoder.java
    • Кодек-HTTP / SRC / главная / Java / И.О. / Нетти / обработчик / Кодек / HTTP / websocketx / WebSocket00FrameDecoder.java
    • Кодек-HTTP / SRC / тест / Java / IO / Нетти / обработчик / Кодек / HTTP / HttpRequestDecoderTest.java
    • Кодек-HTTP / SRC / тест / Java / IO / Нетти / обработчик / Кодек / HTTP / HttpResponseDecoderTest.java
  3. Помимо установки различных ограничений на размер для Integer.MAX_VALUE, я закомментировал соответствующие тесты, чтобы убедиться, что команда Maven "package" успешно создала jar.

  4. Изменения git diff доступны здесь:

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

    Вы можете применить его как патч к нетти-коммиту 04fac00c8c98ed26c5a75887c8e7e53b1e1b68d0

...