Same results for 2.4.6 (please ignore the console output for download, not
helpful)
Nico
On Sunday, April 7, 2013 9:49:26 PM UTC+2, Nico de Groot wrote:
>
> While debugging why the <audio> tag behaves differently (at least in Mac
> Chrome) depending on specifying (1) a static link to a soundfile or (2)
> using the auth.wiki syntax ////2/sound.mp3 I notice quite a few
> differences in the headers.
>
> (1) static: <audio controls="controls"><source
> src="/bgo/static/media/test.mp3" /></audio
>
> (2) download/auth.wiki() <audio controls="controls"><source
> src="/bgo/default/index/2/sound.mp3" /></audio>
>
> The two sets of settings can be shown by using curl, see below. Because
> essentially you ask a file to be served from the file system, you expect
> the same headers. But there not the same.
>
> It seems to me that extra headers and the cookie (and the session) in (2)
> are superfluous. And I discovered that the missing Last-Modified header
> causes the strange Chrome behavior.
>
> I fixed it by monkey-patching the gluon/tools.py media function inside
> auth.wiki. But I'm not sure if it's ok like this. Maybe the
> response.download function should be patched too? My patch is at the
> bottom.
>
> What do you think? Is this a good patch?
>
> I'm still on web2py version 2.2.1 ( will upgrade and test it on latest and
> trunk later, but I don't expect differences)
>
> Nico
>
>
> THE HEADERS
>
> (1) MacBook-Air-van-Nico:~ ncdegroot$ curl -I
> 127.0.0.1:8000/bgo/static/media/test.mp3
>
>> HTTP/1.1 200 OK
>> Content-Length: 38660
>> X-Powered-By: web2py
>> Last-Modified: Tue, 18 Dec 2012 11:20:41 GMT
>> Pragma: cache
>> Cache-Control: private
>> Content-Type: audio/mpeg
>> Date: Sun, 07 Apr 2013 19:19:57 GMT
>> Server: Rocket 1.2.5 Python/2.7.3
>> Connection: keep-alive
>
>
> calling the download function() directly
>
>> MacBook-Air-van-Nico:~ ncdegroot$ curl -I
>> 127.0.0.1:8000/bgo/default/download/sound.mp3
>> HTTP/1.1 404 NOT FOUND
>> Set-Cookie: session_id_bgo=127.0.0.1-8e6fd725-189d-41cd-bd6d-8c7408f66f98;
>> Path=/
>> Content-Length: 536
>> Content-Type: text/html; charset=UTF-8
>> Date: Sun, 07 Apr 2013 15:44:30 GMT
>> Server: Rocket 1.2.5 Python/2.7.3
>> Connection: keep-alive
>
>
> (2) MacBook-Air-van-Nico:~ ncdegroot$ curl -I
> 127.0.0.1:8000/bgo/default/index/2/sound.mp3
>
>> HTTP/1.1 200 OK
>> Content-Length: 11310
>> Content-Disposition: attachment; filename=wh-aam.mp3
>> X-Powered-By: web2py
>> Set-Cookie: session_id_bgo=127.0.0.1-93f3ed51-7469-4ad0-8f47-ac8d5c71b7b1;
>> Path=/
>> Expires: Sun, 07 Apr 2013 11:19:33 GMT
>> Pragma: no-cache
>> Cache-Control: no-store, no-cache, must-revalidate, post-check=0,
>> pre-check=0
>> Content-Type: audio/mpeg
>> Date: Sun, 07 Apr 2013 11:19:33 GMT
>> Server: Rocket 1.2.5 Python/2.7.3
>> Connection: keep-alive
>
>
> THE PATCH (concept)
>
> The differences can be fixed by patching the media() function in the
> auth.wiki part
>
>> gluon.tools.py:
>>
>
>
>> def media(self, id):
>> request, db = current.request, self.auth.db
>> media = db.wiki_media(id)
>> if media:
>> if self.manage_permissions:
>> page = db.wiki_page(media.wiki_page)
>> if not self.can_read(page):
>> return self.not_authorized(page)
>> request.args = [media.filename]
>> return current.response.download(request, db)
>> else:
>> raise HTTP(404)
>>
>
>
>> patched
>>
>
>
>> def media(self, id):
>> request, db = current.request, self.auth.db
>> media = db.wiki_media(id)
>> if media:
>> if self.manage_permissions:
>> page = db.wiki_page(media.wiki_page)
>> if not self.can_read(page):
>> return self.not_authorized(page)
>> request.args = [media.filename]
>> # patch ncdg
>> m = current.response.download(request, db)
>> current.session.forget() # get rid of the cookie
>> current.response.headers['Last-Modified'] =
>> (request.utcnow).strftime("%a, %d %b %Y %H:%M:%S GMT")
>> del current.response.headers['Content-Disposition']
>> current.response.headers['Pragma'] = 'cache'
>> current.response.headers['Cache-Control'] = 'private'
>> return m
>> # /patch ncdg print headers
>> else:
>> raise HTTP(404)
>
>
>
>
--
---
You received this message because you are subscribed to the Google Groups
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.