perf(http): enable HTTP/1.1 keep-alive
Enable HTTP/1.1 on the WebUI server so browsers can reuse TCP
connections across normal API/static requests. Tighten response framing
by adding Content-Length to short manual responses and marking
SSE/streaming responses as Connection: close, keeping HTTP/1.1 message
boundaries unambiguous.
Verified:
- python3 -m py_compile server.py api/auth.py api/routes.py api/kanban_bridge.py
- pytest tests/test_auth_*.py tests/test_*sse*.py tests/test_pr1350_*.py
tests/test_pr1355_sse_handler_no_deadlock.py tests/test_kanban_bridge.py
tests/test_logs_ui_static.py tests/test_onboarding_static.py
tests/test_regressions.py tests/test_1038_pwa_auth_redirect.py
tests/test_issue1623_sse_heartbeat_alignment.py
→ 239 passed, 1 skipped
This commit is contained in:
@@ -435,10 +435,12 @@ def check_auth(handler, parsed) -> bool:
|
||||
return True
|
||||
# Not authorized
|
||||
if parsed.path.startswith('/api/'):
|
||||
body = b'{"error":"Authentication required"}'
|
||||
handler.send_response(401)
|
||||
handler.send_header('Content-Type', 'application/json')
|
||||
handler.send_header('Content-Length', str(len(body)))
|
||||
handler.end_headers()
|
||||
handler.wfile.write(b'{"error":"Authentication required"}')
|
||||
handler.wfile.write(body)
|
||||
else:
|
||||
handler.send_response(302)
|
||||
# Pass the original path as ?next= so login.js redirects back after auth.
|
||||
@@ -468,6 +470,7 @@ def check_auth(handler, parsed) -> bool:
|
||||
# `?`, `&`, `=`) gets percent-encoded.
|
||||
_next = _urlparse.quote(_path_with_query, safe='/')
|
||||
handler.send_header('Location', 'login?next=' + _next)
|
||||
handler.send_header('Content-Length', '0')
|
||||
handler.end_headers()
|
||||
return False
|
||||
|
||||
|
||||
Reference in New Issue
Block a user