-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

All,

This issue is apparently trivially reproducible in my dev environment.

Do I have to get a protocol-trace to get any more helpful information?

Thanks,
- -chris

On 6/24/20 10:46, Christopher Schultz wrote:
> All,
>
> On 6/24/20 10:29, Christopher Schultz wrote:
>> All,
>
>> I'm slowly switching from mod_jk to mod_proxy_ajp and I have a
>> development environment where I'm getting Bad Gateway responses
>> sent to clients along with this exception in my Tomcat log file:
>
>> java.lang.IllegalArgumentException: Header message of length
>> [8,194] received but the packetSize is only [8,192] at
>> org.apache.coyote.ajp.AjpProcessor.readMessage(AjpProcessor.java:685)
>
>>
>
> at
>> org.apache.coyote.ajp.AjpProcessor.receive(AjpProcessor.java:626)
>>
>>
at
>> org.apache.coyote.ajp.AjpProcessor.refillReadBuffer(AjpProcessor.java
:
>
>>
73
>
>
> 4)
>> at
>> org.apache.coyote.ajp.AjpProcessor$SocketInputBuffer.doRead(AjpProces
s
>
>>
or
>
>
> .java:1456)
>> at org.apache.coyote.Request.doRead(Request.java:581) at
>> org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.j
a
>
>>
va
>
>
> :344)
>> at
>> org.apache.catalina.connector.InputBuffer.checkByteBufferEof(InputBuf
f
>
>>
er
>
>
> .java:663)
>> at
>> org.apache.catalina.connector.InputBuffer.readByte(InputBuffer.java:3
5
>
>>
8)
>
>
> at
>> org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStrea
m
>
>>
.j
>
>
> ava:93)
>> at
>> org.apache.commons.io.input.ProxyInputStream.read(ProxyInputStream.ja
v
>
>>
a:
>
>
> 53)
>> at
>> org.apache.commons.io.input.TeeInputStream.read(TeeInputStream.java:1
0
>
>>
6)
>
>
> at java.io.FilterInputStream.read(FilterInputStream.java:83)
>> at my.product.MacInputStream.read(MacInputStream.java:29) at
>> java.io.FilterInputStream.read(FilterInputStream.java:83) at
>> com.sun.org.apache.xerces.internal.impl.XMLEntityManager$RewindableIn
p
>
>>
ut
>
>
> Stream.read(XMLEntityManager.java:2890)
>> at
>> com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrent
E
>
>>
nt
>
>
> ity(XMLEntityManager.java:674)
>> at
>> com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineD
o
>
>>
cV
>
>
> ersion(XMLVersionDetector.java:148)
>> at
>> com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(X
M
>
>>
L1
>
>
> 1Configuration.java:806)
>> at
>> com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(X
M
>
>>
L1
>
>
> 1Configuration.java:771)
>> at
>> com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.
j
>
>>
av
>
>
> a:141)
>> at
>> com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Ab
s
>
>>
tr
>
>
> actSAXParser.java:1213)
>> at
>> com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.p
a
>
>>
rs
>
>
> e(SAXParserImpl.java:643)
>> at
>> com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(SAXParser
I
>
>>
mp
>
>
> l.java:327)
>> at javax.xml.parsers.SAXParser.parse(SAXParser.java:195)
>
>> This is a web service which is reading the request with a
>> SAXParser. It's been running in production (and dev!) for years
>> without any issues. It''s been running for a few months in
>> development, now, with mod_proxy_ajp without any errors.
>
>> I know about the "max packet size" and the default is 8192
>> bytes. I haven't changed the default. Here's my <Connector>
>> configuration:
>
>> <Connector port="8245" address="127.0.0.1"
>> secretRequired="false" redirectPort="443" protocol="AJP/1.3"
>> URIEncoding="UTF-8" executor="tomcatThreadPool" />
>
>> Here's the configuration in httpd.conf:
>
>> <Proxy "balancer://my-api"> BalancerMember
>> "ajp://localhost:8245" timeout=300 ping=5 ttl=60 </Proxy>
>
>> ProxyPass "/my-api/" "balancer://my-api/my-api/"
>> ProxyPassReverse "/my-api/" "balancer://my-api/my-api/"
>
>> The documentation for mod_proxy_ajp[1] seems to indicate that
>> the "Packet Size" for AJP is fixed at 8192 bytes:
>
>> " Packet Size
>
>> According to much of the code, the max packet size is 8 * 1024
>> bytes (8K). The actual length of the packet is encoded in the
>> header.
>
>> Packet Headers
>
>> Packets sent from the server to the container begin with 0x1234.
>> Packets sent from the container to the server begin with AB
>> (that's the ASCII code for A followed by the ASCII code for B).
>> After those first two bytes, there is an integer (encoded as
>> above) with the length of the payload. Although this might
>> suggest that the maximum payload could be as large as 2^16, in
>> fact, *the code sets the maximum to be 8K*. " (emphasis mine)
>
>> Does anyone know under what circumstances mod_proxy_ajp might
>> send more than 8192 bytes? It looks like mod_proxy_ajp doesn't
>> have any way to set the max packet size like mod_jk does.
>
>> I should probably be able to set the max packet size on the
>> Tomcat side to something higher than 8192 to catch this kind of
>> thing... but it looks like it might be a bug in mod_proxy_ajp.
>
>> Versions are Apache httpd 2.4.25 (Debian) and Tomcat 8.5.trunk
>> (8.5.55). mod_jk is not being used.
>
>> Any ideas?
>
>> -chris
>
>> [1] https://httpd.apache.org/docs/2.4/mod/mod_proxy_ajp.html
>
>
> Some additional information:
>
> 1. The headers of the HTTP request seem to be arriving in a
> correct packet before this error occurs. The headers are only a few
> hundred bytes (~340) and the request line should be relatively
> short (~50 bytes or so). Method is POST, protocol is HTTP/1.1.
>
> 2. Apache httpd is terminating TLS. I have no configuration for
> forwarding TLS information over to Tomcat, so I'm assuming it's
> not being sent as part of the first packet.
>
> 3. Before I get the packet-too-large error, I get another error:
>
> org.apache.catalina.connector.ClientAbortException:
> java.io.IOException: Invalid message received with length [-1] at
> org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.ja
va
>
>
:348)
> at
> org.apache.catalina.connector.InputBuffer.checkByteBufferEof(InputBuff
er
>
>
.java:663)
> at
> org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:370)
>
>
at
> org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream
.j
>
>
ava:183)
> at
> org.apache.commons.io.input.ProxyInputStream.read(ProxyInputStream.jav
a:
>
>
75)
> at
> org.apache.commons.io.input.TeeInputStream.read(TeeInputStream.java:12
4)
>
>
at java.io.FilterInputStream.read(FilterInputStream.java:133)
> at my.product.MacInputStream.read(MacInputStream.java:49) at
> java.io.FilterInputStream.read(FilterInputStream.java:107) at
> my.product.XMLMessageProcessor.validate(XMLMessageProcessor.java:326)
>
>
at com.chadis.servlet.APIServlet.doPost(APIServlet.java:291)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:660) at
> javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
>
> I haven't changed any configuration, yet. But if the first error
> is size=-1 then it's unlikely that the problem will be solved by
> increasing my max packet size on the Tomcat end.
>
> I'm working with my client to see if we can reproduce this problem
> reliably. I'm sure I can get more information once I do that.
>
> -chris
>
-----BEGIN PGP SIGNATURE-----
Comment: Using GnuPG with Thunderbird - https://www.enigmail.net/

iQIzBAEBCAAdFiEEMmKgYcQvxMe7tcJcHPApP6U8pFgFAl70tKAACgkQHPApP6U8
pFiziQ//UsUurrwrpeVIs6APgJQvE2MfYBJgI0Oc11D8eOwTaxJrGhTWLZfHUOSX
Fked482+18lYBF1dztPgcWx/mBCw4udHzsTELOOhOMQhOIymJd6QX0/iV2wMwyfS
AS0hWIF70dS8Pyl5GMr1K/bfLn1YAMHrgZrcFoOqMZ5qRAPQTZ834wYkhtT7psnA
APSwMMqwGdnVbZZ5xBAN44TBm7mk07ojip2IkcRU7ZQqDlbtF2gSoTCyOG7I3Z4E
lXSCgxXqwb91PJfco68js5YRGyjVU9YKHI1ClDYgZGtjTIkgeDdG11DxNn7IH1z6
PZqH7MtFJvaafzgR5BZ+TN2SMpHujCV5PDS3tidk9SwyCP5Dk6++SZOi5LUw4VwG
LjGCIsHKHkCyyEKlxRyDaW0FiPrcxVPgAoIXYhfoJMFWwOpgKVLtWSus5pCRNR+q
JUKOm+nl9YnGKzsWX9RiEROBdT0o6JCI1eoCXXbJDTG/OeD5SDyOAh4s0URAAz9p
SoOKUAtKs8lqLPPHoyBsxMvolA1lzavut57YnK0oIKV3jNpFILThfH0lVAncC5ea
7/piXYPK9/m4lqMI2Vg2OLFE32PORQh9Auyrsjdg7e3iSkLvKznGAt912kpTGX1O
NaiLWBYwh4IbhtN/l7Xv77WhzHh85dSNA0rvxEWknrkhg7sfKBg=
=qTQ9
-----END PGP SIGNATURE-----

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to