From 6e1db348178d5df35d8d9bc37f924804b777a83c Mon Sep 17 00:00:00 2001 From: Brian Warner Date: Tue, 28 Oct 2008 18:01:03 -0700 Subject: [PATCH] web/filenode: add Accept-Ranges and ETag (for immutable files) headers to GET responses --- src/allmydata/web/filenode.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/allmydata/web/filenode.py b/src/allmydata/web/filenode.py index b96ba175..472f782c 100644 --- a/src/allmydata/web/filenode.py +++ b/src/allmydata/web/filenode.py @@ -10,7 +10,7 @@ from allmydata.interfaces import ExistingChildError from allmydata.monitor import Monitor from allmydata.immutable.upload import FileHandle from allmydata.immutable.filenode import LiteralFileNode -from allmydata.util import log +from allmydata.util import log, base32 from allmydata.web.common import text_plain, WebError, IClient, RenderMixin, \ boolean_of_arg, get_arg, should_create_intermediate_directories @@ -353,6 +353,13 @@ class FileDownloader(rend.Page): assert isinstance(filesize, (int,long)), filesize offset, size = 0, None contentsize = filesize + req.setHeader("accept-ranges", "bytes") + if not self.filenode.is_mutable(): + # TODO: look more closely at Request.setETag and how it interacts + # with a conditional "if-etag-equals" request, I think this may + # need to occur after the setResponseCode below + req.setETag(base32.b2a(self.filenode.get_storage_index())) + # TODO: for mutable files, use the roothash rangeheader = req.getHeader('range') if rangeheader: # adapted from nevow.static.File -- 2.45.2