summaryrefslogtreecommitdiff
path: root/arch-proxy.py
diff options
context:
space:
mode:
Diffstat (limited to 'arch-proxy.py')
-rwxr-xr-xarch-proxy.py17
1 files changed, 14 insertions, 3 deletions
diff --git a/arch-proxy.py b/arch-proxy.py
index 1ce6fa8..a456c77 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)
@@ -159,6 +167,9 @@ class RequestHandler(http.server.BaseHTTPRequestHandler):
try:
# Try to open cached file and yield data from it
stat_info = os.stat(path)
+ if stat_info.st_size == 0:
+ # Treat empty files as missing.
+ raise FileNotFoundError
response_headers = {'Last-Modified':
epoch_to_text(stat_info.st_mtime)}
self.send_ok(stat_info.st_size, response_headers,