Skip to content

Missing WebDAV HTTP connection reuse (keep-alive) #1898

@devvv4ever

Description

@devvv4ever

Discussed in #1893

Originally posted by WGH- December 21, 2025
Hi

I'm using DAVx⁵ for SeedVault backups, and noticed that HTTP connections are not reused. Since SeedVault uses DAVx⁵ through Storage Access Framework, I'm assuming it's not SeedVault's problem.

This is even more painful since I'm using HTTPS, which handshake is pretty expensive.

This is a part of the access log:

::ffff:192.168.0.6 - <redacted> [21/Dec/2025:13:57:50 +0300] "GET /<redacted>/.SeedVaultAndroidBackup/f46f208ac9b6f55173ce8d1f5e163ce4228d97593286cc0ae725ff9547a9c17c/85/8590c6ba2f8889ea655c11f00ae6991a85bc479a3aeb1e68446dd848cebddedd HTTP/1.1" 206 2097152 "-" "DAVx5/4.5.7.1-ose (dav4jvm; okhttp/5.3.2) Android/16"
::ffff:192.168.0.6 - <redacted> [21/Dec/2025:13:57:51 +0300] "GET /<redacted>/.SeedVaultAndroidBackup/f46f208ac9b6f55173ce8d1f5e163ce4228d97593286cc0ae725ff9547a9c17c/85/8590c6ba2f8889ea655c11f00ae6991a85bc479a3aeb1e68446dd848cebddedd HTTP/1.1" 206 917597 "-" "DAVx5/4.5.7.1-ose (dav4jvm; okhttp/5.3.2) Android/16"
::ffff:192.168.0.6 - <redacted> [21/Dec/2025:13:57:51 +0300] "HEAD /<redacted>/.SeedVaultAndroidBackup/f46f208ac9b6f55173ce8d1f5e163ce4228d97593286cc0ae725ff9547a9c17c/d3/d36c13f6ab0a8e373a650c63681de3731e497057b1a2db42e71efcafea47b287 HTTP/1.1" 200 0 "-" "DAVx5/4.5.7.1-ose (dav4jvm; okhttp/5.3.2) Android/16"
::ffff:192.168.0.6 - <redacted> [21/Dec/2025:13:57:51 +0300] "HEAD /<redacted>/.SeedVaultAndroidBackup/f46f208ac9b6f55173ce8d1f5e163ce4228d97593286cc0ae725ff9547a9c17c/30/306f3a5cacfadd04f79359ab4690c9a859842c4915909ece6b9741fc6cbd711f HTTP/1.1" 200 0 "-" "DAVx5/4.5.7.1-ose (dav4jvm; okhttp/5.3.2) Android/16"
::ffff:192.168.0.6 - <redacted> [21/Dec/2025:13:57:51 +0300] "GET /<redacted>/.SeedVaultAndroidBackup/f46f208ac9b6f55173ce8d1f5e163ce4228d97593286cc0ae725ff9547a9c17c/30/306f3a5cacfadd04f79359ab4690c9a859842c4915909ece6b9741fc6cbd711f HTTP/1.1" 206 1769549 "-" "DAVx5/4.5.7.1-ose (dav4jvm; okhttp/5.3.2) Android/16"
::ffff:192.168.0.6 - <redacted> [21/Dec/2025:13:57:52 +0300] "PROPFIND /<redacted>/.SeedVaultAndroidBackup/f46f208ac9b6f55173ce8d1f5e163ce4228d97593286cc0ae725ff9547a9c17c/b2 HTTP/1.1" 207 4056 "-" "DAVx5/4.5.7.1-ose (dav4jvm; okhttp/5.3.2) Android/16"
::ffff:192.168.0.6 - <redacted> [21/Dec/2025:13:57:52 +0300] "PROPFIND /<redacted>/.SeedVaultAndroidBackup/f46f208ac9b6f55173ce8d1f5e163ce4228d97593286cc0ae725ff9547a9c17c/a0 HTTP/1.1" 207 5594 "-" "DAVx5/4.5.7.1-ose (dav4jvm; okhttp/5.3.2) Android/16"
::ffff:192.168.0.6 - <redacted> [21/Dec/2025:13:57:52 +0300] "GET /<redacted>/.SeedVaultAndroidBackup/f46f208ac9b6f55173ce8d1f5e163ce4228d97593286cc0ae725ff9547a9c17c/d3/d36c13f6ab0a8e373a650c63681de3731e497057b1a2db42e71efcafea47b287 HTTP/1.1" 206 622653 "-" "DAVx5/4.5.7.1-ose (dav4jvm; okhttp/5.3.2) Android/16"

TCP connections are being established and closed all the time:

# tcpdump -i br0 -n 'tcp port 8443 and tcp[tcpflags] & (tcp-syn|tcp-fin|tcp-rst) != 0'
13:57:49.891632 IP 192.168.0.6.54458 > 192.168.0.242.8443: Flags [S], seq 3613437407, win 65535, options [mss 1460,sackOK,TS val 3853992294 ecr 0,nop,wscale 8], length 0
13:57:49.891761 IP 192.168.0.242.8443 > 192.168.0.6.54458: Flags [S.], seq 2068568494, ack 3613437408, win 65160, options [mss 1460,sackOK,TS val 2857646465 ecr 3853992294,nop,wscale 7], length 0
13:57:49.983952 IP 192.168.0.242.8443 > 192.168.0.6.45886: Flags [F.], seq 1482061142, ack 2411917683, win 550, options [nop,nop,TS val 2857646557 ecr 3853917389], length 0
13:57:50.031791 IP 192.168.0.6.54470 > 192.168.0.242.8443: Flags [S], seq 1400023040, win 65535, options [mss 1460,sackOK,TS val 3853992434 ecr 0,nop,wscale 8], length 0
13:57:50.031916 IP 192.168.0.242.8443 > 192.168.0.6.54470: Flags [S.], seq 1214060359, ack 1400023041, win 65160, options [mss 1460,sackOK,TS val 2857646605 ecr 3853992434,nop,wscale 7], length 0
13:57:50.117278 IP 192.168.0.6.54476 > 192.168.0.242.8443: Flags [S], seq 3508023957, win 65535, options [mss 1460,sackOK,TS val 3853992520 ecr 0,nop,wscale 8], length 0
13:57:50.117433 IP 192.168.0.242.8443 > 192.168.0.6.54476: Flags [S.], seq 179758770, ack 3508023958, win 65160, options [mss 1460,sackOK,TS val 2857646691 ecr 3853992520,nop,wscale 7], length 0
13:57:50.339759 IP 192.168.0.6.54478 > 192.168.0.242.8443: Flags [S], seq 3889015013, win 65535, options [mss 1460,sackOK,TS val 3853992741 ecr 0,nop,wscale 8], length 0
13:57:50.339886 IP 192.168.0.242.8443 > 192.168.0.6.54478: Flags [S.], seq 2823259762, ack 3889015014, win 65160, options [mss 1460,sackOK,TS val 2857646913 ecr 3853992741,nop,wscale 7], length 0
13:57:50.749270 IP 192.168.0.6.34408 > 192.168.0.242.8443: Flags [S], seq 2053181123, win 65535, options [mss 1460,sackOK,TS val 3853993150 ecr 0,nop,wscale 8], length 0
13:57:50.749403 IP 192.168.0.242.8443 > 192.168.0.6.34408: Flags [S.], seq 1485976864, ack 2053181124, win 65160, options [mss 1460,sackOK,TS val 2857647323 ecr 3853993150,nop,wscale 7], length 0
13:57:50.985249 IP 192.168.0.242.8443 > 192.168.0.6.45902: Flags [F.], seq 2357096694, ack 2524547337, win 550, options [nop,nop,TS val 2857647559 ecr 3853918444], length 0
13:57:50.985455 IP 192.168.0.242.8443 > 192.168.0.6.45878: Flags [F.], seq 4017123618, ack 258415889, win 570, options [nop,nop,TS val 2857647559 ecr 3853918488], length 0
13:57:51.297530 IP 192.168.0.242.8443 > 192.168.0.6.45912: Flags [F.], seq 1401582657, ack 1141513820, win 570, options [nop,nop,TS val 2857647871 ecr 3853918703], length 0
13:57:51.314108 IP 192.168.0.242.8443 > 192.168.0.6.45912: Flags [F.], seq 0, ack 1, win 570, options [nop,nop,TS val 2857647888 ecr 3853918703], length 0
13:57:51.689983 IP 192.168.0.6.34416 > 192.168.0.242.8443: Flags [S], seq 693221603, win 65535, options [mss 1460,sackOK,TS val 3853994093 ecr 0,nop,wscale 8], length 0
13:57:51.690057 IP 192.168.0.242.8443 > 192.168.0.6.34416: Flags [S.], seq 4036092659, ack 693221604, win 65160, options [mss 1460,sackOK,TS val 2857648264 ecr 3853994093,nop,wscale 7], length 0
13:57:51.962267 IP 192.168.0.242.8443 > 192.168.0.6.45926: Flags [F.], seq 751058364, ack 1799442708, win 550, options [nop,nop,TS val 2857648536 ecr 3853919371], length 0
13:57:51.986923 IP 192.168.0.242.8443 > 192.168.0.6.45946: Flags [F.], seq 2286691415, ack 3825699966, win 550, options [nop,nop,TS val 2857648560 ecr 3853919394], length 0
13:57:52.030757 IP 192.168.0.242.8443 > 192.168.0.6.45940: Flags [F.], seq 3662732606, ack 2473462703, win 570, options [nop,nop,TS val 2857648604 ecr 3853919480], length 0
13:57:52.081700 IP 192.168.0.6.34432 > 192.168.0.242.8443: Flags [S], seq 2946882716, win 65535, options [mss 1460,sackOK,TS val 3853994485 ecr 0,nop,wscale 8], length 0
13:57:52.081751 IP 192.168.0.242.8443 > 192.168.0.6.34432: Flags [S.], seq 4200648726, ack 2946882717, win 65160, options [mss 1460,sackOK,TS val 2857648655 ecr 3853994485,nop,wscale 7], length 0

Moreoever, it seems they're not properly closed either. There's hundreds of connections stuck in FIN-WAIT-2 state on the web server side.

Version: 4.5.7.1-ose (F-Droid)

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

Status

Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions