Merge PR #13 with gzip-only WebConfig assets

Keep the graceful final-ACK TCP close and optional FEM control guards from
pixitha's browser compatibility fixes. Replace Brotli negotiation and duplicate
page assets with one gzip representation compressed by Google Zopfli 0.4.3
using 1,000 iterations. Compress the bootstrap, captive success, compact OTA,
and static WiFi setup pages with the same validated build cache.

Honor gzip quality values and wildcard precedence. Validate compressed OTA
page evidence in the firmware capability gate, and add native and Python
regressions plus CI coverage. Remove the unused Brotli build dependency.

Validation: 54 native tests, 56 Python/browser checks, full V4.3 build and
verified application flash. Actual V4 WiFi responses matched the generated
gzip assets; 30 repeat downloads completed without reboot. Chromium loaded
the setup and settings pages without script or transfer errors. Physical
Android testing is pending because the Pi detects no phone over USB or mDNS.
This commit is contained in:
mikecarper committed 2026-09-30 18:55:17 -07:00
commit 02b8935794
23 files changed
+2674 -2084

No files matched your search

+9
View File
@@ -104,6 +104,15 @@ and memory limits.
## MQTT observer setup
WebConfig serves gzip only, including its bootstrap and captive-portal success
pages. Static WiFi setup and browser OTA pages use the same format. Builds use
Google Zopfli 0.4.3 with 1,000 iterations; validated results are cached under
`.pio/gzip-html`. There is no Brotli dependency or second WebConfig page copy.
Browsers decompress the pages automatically over ordinary HTTP. WebConfig
returns HTTP 406 when a client explicitly excludes gzip. Its large page closes
the TCP connection gracefully after the final acknowledged bytes so browsers
do not report a completed download as aborted.
Most full-size ESP32 MQTT observer builds have the shared WebConfig portal. On a
fresh device with no saved SSID: