uWebSockets icon indicating copy to clipboard operation
uWebSockets copied to clipboard

Http request error 505 when the first line of the request is fragmented.

Open kindablissy opened this issue 1 year ago • 4 comments

If the first line of http request somehow misses to go in the same packet as [method] [path] [version]\r\n but instead gets something like [method] and [path] [version]\r\n it will return with version not supported error. Is this expected ?

kindablissy avatar Aug 21 '24 06:08 kindablissy

Must be a regression from when more detailed errors were added because this is not the old behavior

uNetworkingAB avatar Aug 21 '24 09:08 uNetworkingAB

Needs unit test and fix

uNetworkingAB avatar Aug 21 '24 09:08 uNetworkingAB

I am also seeing this error when trying to serve a Qt application built for Webassembly. I am attaching the files which are served if this will help for debugging. If I serve the files locally, all works. But my real setup is on a remote server with HAProxy terminating the TLS certificate and then forwarding to uWebsockets server. Webassembly application will require these two headers to be set

                res->writeHeader("Cross-Origin-Embedder-Policy", "require-corp");
                res->writeHeader("Cross-Origin-Opener-Policy", "same-origin");

gallery.zip

slavslavov avatar Aug 28 '24 10:08 slavslavov

There is no debugging needed it happens here https://github.com/uNetworking/uWebSockets/blob/9cca5d68e0ac7153d8250445c076a9ffc3d58dae/src/HttpParser.h#L370

It needs to check whether it reached end of data and if so, just return 0 instead of setting error. Then it will keep accepting more data instead of immediately closing with error.

uNetworkingAB avatar Aug 28 '24 11:08 uNetworkingAB

If I comment out that line I don't see the error any more so as you suggest it is probably an easy fix.

But I was curious why I see this error when I am using HAProxy. I noticed the error when I am using the Proxy Protocol, and uWebsockets is compiled to support it. If I disable HAProxy sending the proxy protocol header I don't see the error any more.

I did use tcpdump and wireshark to capture the traffic between HAProxy and uWebsockets. I noticed that HAproxy checks the connection every two seconds and also sends the protocol header. And I can see the error sometimes returned in these checks. Here is part of the dump and wireshark capture is attached:

capture.zip

12:14:05.971392 IP localhost.10046 > localhost.65012: Flags [S], seq 1227822058, win 65495, options [mss 65495,sackOK,TS val 3656833800 ecr 0,nop,wscale 7], length 0
	0x0000:  4500 003c fd7c 4000 4006 da3c 7f00 6501  E..<.|@.@..<..e.
	0x0010:  7f00 0001 273e fdf4 492f 13ea 0000 0000  ....'>..I/......
	0x0020:  a002 ffd7 6331 0000 0204 ffd7 0402 080a  ....c1..........
	0x0030:  d9f6 db08 0000 0000 0103 0307            ............
12:14:05.971414 IP localhost.65012 > localhost.10046: Flags [S.], seq 1888127914, ack 1227822059, win 65483, options [mss 65495,sackOK,TS val 4167233272 ecr 3656833800,nop,wscale 7], length 0
	0x0000:  4500 003c 0000 4000 4006 d7b9 7f00 0001  E..<..@.@.......
	0x0010:  7f00 6501 fdf4 273e 708a 8baa 492f 13eb  ..e...'>p...I/..
	0x0020:  a012 ffcb 6331 0000 0204 ffd7 0402 080a  ....c1..........
	0x0030:  f862 eef8 d9f6 db08 0103 0307            .b..........
12:14:05.971487 IP localhost.10046 > localhost.65012: Flags [P.], seq 1:17, ack 1, win 512, options [nop,nop,TS val 3656833800 ecr 4167233272], length 16
	0x0000:  4500 0044 fd7d 4000 4006 da33 7f00 6501  E..D.}@[email protected].
	0x0010:  7f00 0001 273e fdf4 492f 13eb 708a 8bab  ....'>..I/..p...
	0x0020:  8018 0200 6339 0000 0101 080a d9f6 db08  ....c9..........
	0x0030:  f862 eef8 0d0a 0d0a 000d 0a51 5549 540a  .b.........QUIT.
	0x0040:  2000 0000                                ....
12:14:05.971526 IP localhost.65012 > localhost.10046: Flags [.], ack 17, win 512, options [nop,nop,TS val 4167233272 ecr 3656833800], length 0
	0x0000:  4500 0034 e152 4000 4006 f66e 7f00 0001  E..4.R@[email protected]....
	0x0010:  7f00 6501 fdf4 273e 708a 8bab 492f 13fb  ..e...'>p...I/..
	0x0020:  8010 0200 6329 0000 0101 080a f862 eef8  ....c).......b..
	0x0030:  d9f6 db08                                ....
12:14:05.971559 IP localhost.10046 > localhost.65012: Flags [R.], seq 17, ack 1, win 512, options [nop,nop,TS val 3656833800 ecr 4167233272], length 0
	0x0000:  4500 0034 fd7e 4000 4006 da42 7f00 6501  E..4.~@[email protected].
	0x0010:  7f00 0001 273e fdf4 492f 13fb 708a 8bab  ....'>..I/..p...
	0x0020:  8014 0200 6329 0000 0101 080a d9f6 db08  ....c)..........
	0x0030:  f862 eef8                                .b..

12:14:07.973053 IP localhost.10047 > localhost.65012: Flags [S], seq 2806089025, win 65495, options [mss 65495,sackOK,TS val 3656835802 ecr 0,nop,wscale 7], length 0
	0x0000:  4500 003c 3487 4000 4006 a332 7f00 6501  E..<4.@[email protected].
	0x0010:  7f00 0001 273f fdf4 a741 8541 0000 0000  ....'?...A.A....
	0x0020:  a002 ffd7 6331 0000 0204 ffd7 0402 080a  ....c1..........
	0x0030:  d9f6 e2da 0000 0000 0103 0307            ............
12:14:07.973078 IP localhost.65012 > localhost.10047: Flags [S.], seq 587897328, ack 2806089026, win 65483, options [mss 65495,sackOK,TS val 4167235274 ecr 3656835802,nop,wscale 7], length 0
	0x0000:  4500 003c 0000 4000 4006 d7b9 7f00 0001  E..<..@.@.......
	0x0010:  7f00 6501 fdf4 273f 230a 99f0 a741 8542  ..e...'?#....A.B
	0x0020:  a012 ffcb 6331 0000 0204 ffd7 0402 080a  ....c1..........
	0x0030:  f862 f6ca d9f6 e2da 0103 0307            .b..........
12:14:07.973158 IP localhost.10047 > localhost.65012: Flags [P.], seq 1:17, ack 1, win 512, options [nop,nop,TS val 3656835802 ecr 4167235274], length 16
	0x0000:  4500 0044 3488 4000 4006 a329 7f00 6501  E..D4.@.@..)..e.
	0x0010:  7f00 0001 273f fdf4 a741 8542 230a 99f1  ....'?...A.B#...
	0x0020:  8018 0200 6339 0000 0101 080a d9f6 e2da  ....c9..........
	0x0030:  f862 f6ca 0d0a 0d0a 000d 0a51 5549 540a  .b.........QUIT.
	0x0040:  2000 0000                                ....
12:14:07.973199 IP localhost.65012 > localhost.10047: Flags [.], ack 17, win 512, options [nop,nop,TS val 4167235274 ecr 3656835802], length 0
	0x0000:  4500 0034 38df 4000 4006 9ee2 7f00 0001  E..48.@.@.......
	0x0010:  7f00 6501 fdf4 273f 230a 99f1 a741 8552  ..e...'?#....A.R
	0x0020:  8010 0200 6329 0000 0101 080a f862 f6ca  ....c).......b..
	0x0030:  d9f6 e2da                                ....
12:14:07.973529 IP localhost.65012 > localhost.10047: Flags [P.], seq 1:63, ack 17, win 512, options [nop,nop,TS val 4167235274 ecr 3656835802], length 62
	0x0000:  4500 0072 38e0 4000 4006 9ea3 7f00 0001  E..r8.@.@.......
	0x0010:  7f00 6501 fdf4 273f 230a 99f1 a741 8552  ..e...'?#....A.R
	0x0020:  8018 0200 6367 0000 0101 080a f862 f6ca  ....cg.......b..
	0x0030:  d9f6 e2da 4854 5450 2f31 2e31 2035 3035  ....HTTP/1.1.505
	0x0040:  2048 5454 5020 5665 7273 696f 6e20 4e6f  .HTTP.Version.No
	0x0050:  7420 5375 7070 6f72 7465 640d 0a43 6f6e  t.Supported..Con
	0x0060:  6e65 6374 696f 6e3a 2063 6c6f 7365 0d0a  nection:.close..
	0x0070:  0d0a                                     ..
12:14:07.973559 IP localhost.65012 > localhost.10047: Flags [F.], seq 63, ack 17, win 512, options [nop,nop,TS val 4167235274 ecr 3656835802], length 0
	0x0000:  4500 0034 38e1 4000 4006 9ee0 7f00 0001  E..48.@.@.......
	0x0010:  7f00 6501 fdf4 273f 230a 9a2f a741 8552  ..e...'?#../.A.R
	0x0020:  8011 0200 6329 0000 0101 080a f862 f6ca  ....c).......b..
	0x0030:  d9f6 e2da                                ....
12:14:07.973650 IP localhost.10047 > localhost.65012: Flags [F.], seq 17, ack 64, win 512, options [nop,nop,TS val 3656835802 ecr 4167235274], length 0
	0x0000:  4500 0034 3489 4000 4006 a338 7f00 6501  E..44.@[email protected].
	0x0010:  7f00 0001 273f fdf4 a741 8552 230a 9a30  ....'?...A.R#..0
	0x0020:  8011 0200 6329 0000 0101 080a d9f6 e2da  ....c)..........
	0x0030:  f862 f6ca                                .b..
12:14:07.973675 IP localhost.65012 > localhost.10047: Flags [.], ack 18, win 512, options [nop,nop,TS val 4167235274 ecr 3656835802], length 0
	0x0000:  4500 0034 38e2 4000 4006 9edf 7f00 0001  E..48.@.@.......
	0x0010:  7f00 6501 fdf4 273f 230a 9a30 a741 8553  ..e...'?#..0.A.S
	0x0020:  8010 0200 6329 0000 0101 080a f862 f6ca  ....c).......b..
	0x0030:  d9f6 e2da                                ....

12:14:09.974951 IP localhost.10048 > localhost.65012: Flags [S], seq 3141492745, win 65495, options [mss 65495,sackOK,TS val 3656837804 ecr 0,nop,wscale 7], length 0
	0x0000:  4500 003c 65ba 4000 4006 71ff 7f00 6501  E..<e.@[email protected].
	0x0010:  7f00 0001 2740 fdf4 bb3f 6009 0000 0000  ....'@...?`.....
	0x0020:  a002 ffd7 6331 0000 0204 ffd7 0402 080a  ....c1..........
	0x0030:  d9f6 eaac 0000 0000 0103 0307            ............
12:14:09.974975 IP localhost.65012 > localhost.10048: Flags [S.], seq 54041943, ack 3141492746, win 65483, options [mss 65495,sackOK,TS val 4167237276 ecr 3656837804,nop,wscale 7], length 0
	0x0000:  4500 003c 0000 4000 4006 d7b9 7f00 0001  E..<..@.@.......
	0x0010:  7f00 6501 fdf4 2740 0338 9d57 bb3f 600a  ..e...'@.8.W.?`.
	0x0020:  a012 ffcb 6331 0000 0204 ffd7 0402 080a  ....c1..........
	0x0030:  f862 fe9c d9f6 eaac 0103 0307            .b..........
12:14:09.975048 IP localhost.10048 > localhost.65012: Flags [P.], seq 1:17, ack 1, win 512, options [nop,nop,TS val 3656837804 ecr 4167237276], length 16
	0x0000:  4500 0044 65bb 4000 4006 71f6 7f00 6501  E..De.@[email protected].
	0x0010:  7f00 0001 2740 fdf4 bb3f 600a 0338 9d58  ....'@...?`..8.X
	0x0020:  8018 0200 6339 0000 0101 080a d9f6 eaac  ....c9..........
	0x0030:  f862 fe9c 0d0a 0d0a 000d 0a51 5549 540a  .b.........QUIT.
	0x0040:  2000 0000                                ....
12:14:09.975087 IP localhost.65012 > localhost.10048: Flags [.], ack 17, win 512, options [nop,nop,TS val 4167237276 ecr 3656837804], length 0
	0x0000:  4500 0034 b5f5 4000 4006 21cc 7f00 0001  E..4..@.@.!.....
	0x0010:  7f00 6501 fdf4 2740 0338 9d58 bb3f 601a  ..e...'@.8.X.?`.
	0x0020:  8010 0200 6329 0000 0101 080a f862 fe9c  ....c).......b..
	0x0030:  d9f6 eaac                                ....
12:14:09.975128 IP localhost.10048 > localhost.65012: Flags [R.], seq 17, ack 1, win 512, options [nop,nop,TS val 3656837804 ecr 4167237276], length 0
	0x0000:  4500 0034 65bc 4000 4006 7205 7f00 6501  E..4e.@[email protected].
	0x0010:  7f00 0001 2740 fdf4 bb3f 601a 0338 9d58  ....'@...?`..8.X
	0x0020:  8014 0200 6329 0000 0101 080a d9f6 eaac  ....c)..........
	0x0030:  f862 fe9c  	

slavslavov avatar Aug 29 '24 12:08 slavslavov

Needs a good test that just takes a simple request, chunks it up into every combination of two segements and asserts same outcome for all. Working on it

uNetworkingAB avatar Aug 31 '24 18:08 uNetworkingAB

You mind testing latest commit? It still lacks a test but should probably work now

uNetworkingAB avatar Sep 01 '24 17:09 uNetworkingAB

I tested with commit 6b966b24ee2d186fcfd86c3f3d450fa913782c60 and I can't see the error any more. I used the same environment as before - HAProxy terminating TLS and forwarding to uWebsockets with checks and Proxy Protocol V2. I ran tcpdump and wireshark for about 20 minutes, also quite intensively requesting a large .wasm file. All looks good now.

slavslavov avatar Sep 01 '24 19:09 slavslavov

Great I just need a unit test for this and will release

uNetworkingAB avatar Sep 01 '24 19:09 uNetworkingAB