diff options
author | Peter Wu <peter@lekensteyn.nl> | 2022-12-28 17:33:56 +0100 |
---|---|---|
committer | Peter Wu <peter@lekensteyn.nl> | 2022-12-28 17:33:56 +0100 |
commit | b703e972dc4c686a3f7780c6f6b4050f23d7417c (patch) | |
tree | efcd6725700fec6f432707a2803eefd507c0a8b0 | |
parent | ad0c238402d8da676f7f76ba9b4cd4669e6efee3 (diff) | |
download | scripts-b703e972dc4c686a3f7780c6f6b4050f23d7417c.tar.gz |
arch-proxy.py: accept upstream responses without Content-Length header
This can occur while manually querying directory indexes.
-rwxr-xr-x | arch-proxy.py | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/arch-proxy.py b/arch-proxy.py index 1ce6fa8..5a7b2c2 100755 --- a/arch-proxy.py +++ b/arch-proxy.py @@ -31,6 +31,9 @@ class RequestHandler(http.server.BaseHTTPRequestHandler): if range_offset is None: code = 200 else: + if size is None: + raise BadRequest("Content-Length missing in upstream response" + " for range request") if range_offset >= size: # TODO need different status code raise BadRequest("416 Requested Range Not Satisfiable") @@ -41,7 +44,8 @@ class RequestHandler(http.server.BaseHTTPRequestHandler): self.log_message('"%s" %d %s %s', self.requestline, code, size, "HIT" if upstream is None else "MISS:%s" % (upstream,)) self.send_response_only(code) - self.send_header('Content-Length', size) + if size is not None: + self.send_header('Content-Length', size) for k, v in headers.items(): self.send_header(k, v) self.end_headers() @@ -83,8 +87,12 @@ class RequestHandler(http.server.BaseHTTPRequestHandler): mtime_out[0] = mtime except ValueError: self.log_error("Unable to parse Last-Modified header") - self.send_ok(int(r.headers['Content-Length']), response_headers, - upstream=upstream, range_offset=range_offset) + if 'Content-Length' in r.headers: + self.send_ok(int(r.headers['Content-Length']), response_headers, + upstream=upstream, range_offset=range_offset) + else: + self.send_ok(None, response_headers, + upstream=upstream, range_offset=range_offset) if not head_only: yield from r.iter_content(4096) |