Hello Joakim, Thanks for the insight. I'll try to start off with making the application running on Jetty "upgrade-aware" - it's a Ninja Framework app that should *not* be setting headers, so I'm guessing something is also off there. I suspected the *app* itself before too, but since the success/failure seemed to be controlled more closely by the Jetty version, I discounted the framework being faulty itself. I'll also try to isolate a "test case" app, see if it needs to be reported to Ninja's developers.
Thank you again, Zalan Meggyesi Chief Support Engineer Skawa Innovation Kft. Phone: 0036704627005 Mobile: +36205146666 On Mon, Mar 18, 2019 at 8:32 PM Joakim Erdfelt <[email protected]> wrote: > Another problem seen in unsuccessful connection.pcapng is that the > WebSocket client you are using is violating the WebSocket protocol by > sending WebSocket frames before the opening handshake is complete. > > It sends the HTTP Upgrade Request (packet 4) > Then a few WebSocket Frames (packet 8) > Then the server responds with the HTTP Upgrade Response (to websocket, in > packet 12) > Then your WebSocket client sends more frames (packet 15) > > It should not send websocket frames until the handshake is completed. > This is especially true with permessage-deflate as that requires knowledge > of prior websocket frames to operate properly. > > Joakim Erdfelt / [email protected] > > > On Mon, Mar 18, 2019 at 2:25 PM Joakim Erdfelt <[email protected]> wrote: > >> In unsuccessful connection.pcapng the response from the server is ... >> >> HTTP/1.1 101 Switching Protocols >> Date: Mon, 18 Mar 2019 17:04:47 GMT >> Connection: Upgrade >> Cache-Control: no-cache, no-store, max-age=0, must-revalidate >> Expires: Thu, 01 Jan 1970 00:00:00 GMT >> Upgrade: WebSocket >> Date: Mon, 18 Mar 2019 17:04:47 GMT >> Sec-WebSocket-Accept: 2ehI1RO+UMwBNHwQJy91/GWGaJA= >> Content-Type: application/json;charset=utf-8 >> >> This is a very strange response. >> The `Cache-Control`, `Expires`, and `Content-Type` headers are not >> produced by the Jetty WebSocket implementation. >> Do you have some kind of Filter that adds those headers? >> If so, you'll need to make sure that Filter is "upgrade aware" and not do >> anything to the request/response if it detects a Upgrade being attempted. >> This includes setting headers, wrapping the request or response, or >> attempting to access/control the request.inputStream/reader or >> response.outputStream/writer. >> >> You can make your Filter "upgrade aware" by testing the request headers >> for "Connection: upgrade" (the value is case insensitive) >> >> Joakim Erdfelt / [email protected] >> >> >> On Mon, Mar 18, 2019 at 2:17 PM Joakim Erdfelt <[email protected]> >> wrote: >> >>> ISO-8859-1 is the default charset of HTTP/1.x (you can see that in the >>> old, now obsolete, https://tools.ietf.org/html/rfc2616) >>> >>> Joakim Erdfelt / [email protected] >>> >>> >>> On Mon, Mar 18, 2019 at 12:54 PM Meggyesi, Zalán <[email protected]> >>> wrote: >>> >>>> Hello Joakim, >>>> >>>> I did take a Wireshark to both the Java-Websocket server and the Jetty >>>> webserver (packet captures attached), but to be honest, it only got me even >>>> more confused, since I'm now seeing encoding differences between the two, >>>> and I'm not really sure where the ISO-8859-1 charset is coming from nor why >>>> it would cause a length mismatch... >>>> >>>> Best Regards, >>>> >>>> Zalan Meggyesi >>>> Chief Support Engineer >>>> Skawa Innovation Kft. >>>> >>>> Phone: 0036704627005 >>>> Mobile: +36205146666 >>>> >>>> >>>> On Fri, Mar 8, 2019 at 10:23 PM Joakim Erdfelt <[email protected]> >>>> wrote: >>>> >>>>> You can use a tool like Wireshark and see what's being sent back/forth >>>>> with a breakdown of the WebSocket frames (headers+payload) >>>>> You should be able to see where that bad Frame with RSV1 set to true >>>>> is coming from. >>>>> >>>>> From what I can tell, the project org.java_websocket is throwing that >>>>> exception because it thinks it sees a frame with RSV1 set to true. >>>>> That should only be true for the combination of using >>>>> permessage-deflate extension and the frame being a non-continuation data >>>>> frame (TEXT/BINARY). >>>>> >>>>> Joakim Erdfelt / [email protected] >>>>> >>>>> >>>>> On Fri, Mar 8, 2019 at 11:52 AM Meggyesi, Zalán <[email protected]> >>>>> wrote: >>>>> >>>>>> Hello Joakim, >>>>>> >>>>>> I ran a build of Jetty 10.0.0 based on the latest source, but I'm >>>>>> still getting the exception: >>>>>> org.java_websocket.exceptions.InvalidFrameException: >>>>>> bad rsv RSV1: true RSV2: false RSV3: false >>>>>> I saw your PR merged, so I'm probably doing something wrong, but I >>>>>> have no idea *what*... >>>>>> >>>>>> Best, >>>>>> >>>>>> Zalan Meggyesi >>>>>> Chief Support Engineer >>>>>> Skawa Innovation Kft. >>>>>> >>>>>> Phone: 0036704627005 >>>>>> Mobile: +36205146666 >>>>>> >>>>>> >>>>>> On Fri, Mar 1, 2019 at 11:08 PM Meggyesi, Zalán <[email protected]> >>>>>> wrote: >>>>>> >>>>>>> Hello again, >>>>>>> >>>>>>> I *did* try sending Sec-WebSocket-Extensions:[deflate-frame] this >>>>>>> time, but it still resulted in an exception >>>>>>> (org.java_websocket.exceptions.InvalidFrameException: >>>>>>> bad rsv RSV1: true RSV2: false RSV3: false). >>>>>>> >>>>>>> Just to let you know. >>>>>>> >>>>>>> Best, >>>>>>> Zalan >>>>>>> >>>>>>> On Fri, Mar 1, 2019 at 10:36 PM Meggyesi, Zalán <[email protected]> >>>>>>> wrote: >>>>>>> >>>>>>>> Hello Joakim, >>>>>>>> >>>>>>>> Thanks for your quick reply, this is very helpful! >>>>>>>> I added a line to log the request headers: >>>>>>>> >>>>>>>> 22:18:22.772 [qtp33233312-29] INFO h.s.s.g.filters.LoggerFilter - >>>>>>>> Headers: >>>>>>>> Sec-WebSocket-Key:[SquKmRXFd5Bt4jUcPD0mkw==] >>>>>>>> Connection:[Upgrade] >>>>>>>> Sec-WebSocket-Version:[13] >>>>>>>> Host:[localhost:8000] >>>>>>>> Upgrade:[websocket] >>>>>>>> >>>>>>>> while the response headers have >>>>>>>> >>>>>>>> Connection: Upgrade; Upgrade >>>>>>>> Date: Fri, 01 Mar 2019 21:35:24 GMT >>>>>>>> Sec-WebSocket-Accept: LlhSOQ+9EI8rCJ2z9vb5wEhG2bM= >>>>>>>> Server: Jetty(9.4.12.v20180830) >>>>>>>> Upgrade: WebSocket >>>>>>>> >>>>>>>> Let me know if this is helpful to you! >>>>>>>> >>>>>>>> Best Regards, >>>>>>>> Zalan >>>>>>>> >>>>>>>> On Fri, Mar 1, 2019 at 10:16 PM Joakim Erdfelt <[email protected]> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> Actually, I am making an assumption that >>>>>>>>> https://github.com/TooTallNate/Java-WebSocket/ only supports >>>>>>>>> permessage-deflate. >>>>>>>>> It could be that it also supports deflate-frame (an older >>>>>>>>> deprecated extension that Jetty also supports). >>>>>>>>> >>>>>>>>> Can you please double check what the HTTP Upgrade Request headers >>>>>>>>> and HTTP Upgrade Response headers are? >>>>>>>>> That will tell us exactly what extensions were negotiated. >>>>>>>>> >>>>>>>>> Joakim Erdfelt / [email protected] >>>>>>>>> >>>>>>>>> >>>>>>>>> On Fri, Mar 1, 2019 at 4:11 PM Joakim Erdfelt <[email protected]> >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>>> Disable permessage-deflate and don't negotiate it between your >>>>>>>>>> client / server. >>>>>>>>>> >>>>>>>>>> You've stumbled into a variant of issue >>>>>>>>>> https://github.com/eclipse/jetty.project/issues/3159 >>>>>>>>>> >>>>>>>>>> Joakim Erdfelt / [email protected] >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Fri, Mar 1, 2019 at 2:29 PM Meggyesi, Zalán < >>>>>>>>>> [email protected]> wrote: >>>>>>>>>> >>>>>>>>>>> Hi, >>>>>>>>>>> >>>>>>>>>>> I've floated this problem a while ago, but I only just got >>>>>>>>>>> around to actually getting some data on it. >>>>>>>>>>> >>>>>>>>>>> It seems like websocket handling ... well, for lack of a better >>>>>>>>>>> word, "broke" after v9.4.12.v20180830. >>>>>>>>>>> I'm using the Ninja Framework, which bundles this version of >>>>>>>>>>> Jetty as its internal webserver, and if I launch a skeleton WS >>>>>>>>>>> server using >>>>>>>>>>> the bundled Jetty instance, connections go through just fine. On >>>>>>>>>>> the other >>>>>>>>>>> hand, if I use the latest Jetty plugin from Maven Central, and >>>>>>>>>>> launch the >>>>>>>>>>> same WS server, I get an error when I try to send a message, >>>>>>>>>>> specifically, org.java_websocket.exceptions.InvalidFrameException: >>>>>>>>>>> bad rsv RSV1: true RSV2: false RSV3: false. I'm using this >>>>>>>>>>> project >>>>>>>>>>> <https://t.sidekickopen07.com/s2t/c/5/f18dQhb0S7lC8dDMPbW2n0x6l2B9nMJN7t5XZsd_Y1WW7fZy424XyK2bW4Wzrfn56dH0SdvF0Qz02?t=https%3A%2F%2Fgithub.com%2FTooTallNate%2FJava-WebSocket&si=5091535561949184&pi=c62e4189-aa69-4f91-9ecf-0dde2f6ef24a> >>>>>>>>>>> as my WS client. >>>>>>>>>>> >>>>>>>>>>> Now, my go-to reaction would be to simply downgrade my >>>>>>>>>>> standalone Jetty installation to 9.4.12, but unfortunately because >>>>>>>>>>> my >>>>>>>>>>> *real* application runs under Java 11, I cannot do that (due to >>>>>>>>>>> an outdated ASM in the 9.4.12 version). >>>>>>>>>>> >>>>>>>>>>> Can anyone give me some pointers as where this might be going >>>>>>>>>>> wrong? >>>>>>>>>>> >>>>>>>>>>> Best, >>>>>>>>>>> Zalan >>>>>>>>>>> _______________________________________________ >>>>>>>>>>> jetty-users mailing list >>>>>>>>>>> [email protected] >>>>>>>>>>> To change your delivery options, retrieve your password, or >>>>>>>>>>> unsubscribe from this list, visit >>>>>>>>>>> https://www.eclipse.org/mailman/listinfo/jetty-users >>>>>>>>>> >>>>>>>>>> _______________________________________________ >>>>>>>>> jetty-users mailing list >>>>>>>>> [email protected] >>>>>>>>> To change your delivery options, retrieve your password, or >>>>>>>>> unsubscribe from this list, visit >>>>>>>>> https://www.eclipse.org/mailman/listinfo/jetty-users >>>>>>>> >>>>>>>> _______________________________________________ >>>>>> jetty-users mailing list >>>>>> [email protected] >>>>>> To change your delivery options, retrieve your password, or >>>>>> unsubscribe from this list, visit >>>>>> https://www.eclipse.org/mailman/listinfo/jetty-users >>>>> >>>>> _______________________________________________ >>>>> jetty-users mailing list >>>>> [email protected] >>>>> To change your delivery options, retrieve your password, or >>>>> unsubscribe from this list, visit >>>>> https://www.eclipse.org/mailman/listinfo/jetty-users >>>> >>>> _______________________________________________ >>>> jetty-users mailing list >>>> [email protected] >>>> To change your delivery options, retrieve your password, or unsubscribe >>>> from this list, visit >>>> https://www.eclipse.org/mailman/listinfo/jetty-users >>> >>> _______________________________________________ > jetty-users mailing list > [email protected] > To change your delivery options, retrieve your password, or unsubscribe > from this list, visit > https://www.eclipse.org/mailman/listinfo/jetty-users
_______________________________________________ jetty-users mailing list [email protected] To change your delivery options, retrieve your password, or unsubscribe from this list, visit https://www.eclipse.org/mailman/listinfo/jetty-users
