-----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