What webserver are you using?

You could use the X-Sendfile header if it supports it. This way the
webserver will send cache headers and web2py does not have to serve
them.

--
Thadeus





On Tue, May 4, 2010 at 9:25 PM, mdipierro <mdipie...@cs.depaul.edu> wrote:
> response.stream (which you use) handles if-modified-since and range
> requests automatically.
>
> On May 4, 9:04 pm, Mariano Reingart <reing...@gmail.com> wrote:
>> I thought so,
>>
>> I had to modify mydownload so browsers do client-side caching,
>> speeding up the web-page load:
>>
>> def fast_download():
>>     # very basic security:
>>     if not request.args(0).startswith("sponsor.logo"):
>>         return download()
>>     # remove/add headers that prevent/favors caching
>>     del response.headers['Cache-Control']
>>     del response.headers['Pragma']
>>     del response.headers['Expires']
>>     filename = os.path.join(request.folder,'uploads',request.args(0))
>>     response.headers['Last-Modified'] = time.strftime("%a, %d %b %Y
>> %H:%M:%S +0000", time.localtime(os.path.getmtime(filename)))
>>     return response.stream(open(filename,'rb'))
>>
>> TODO: handle If-Modified-Since (returning 304 if not modified), but as
>> you said, let the browser do that if so much performance is needed (so
>> far, fast_download is working fine for me now :-)
>>
>> Thanks very much for your help, and please let me know if there is
>> anything wrong with this approach,
>>
>> Best regards,
>>
>> Mariano 
>> Reingarthttp://www.web2py.com.arhttp://www.sistemasagiles.com.arhttp://reingart.blogspot.com
>>
>> On Tue, May 4, 2010 at 10:23 PM, mdipierro <mdipie...@cs.depaul.edu> wrote:
>> > caching downloads does not make sense. This is because the role of
>> > download is to check permissions to download a file (if they are set).
>> > if you cache it then you do not check. If you do not need to check do
>> > not use download. Use
>>
>> > def mydownload():
>> >     return
>> > response.stream(open(os.path.join(request.folder,'uploads',request.args(0)),'rb'))
>>
>> > or better use the web server to download the uploaded files.
>>
>> > On May 4, 6:11 pm, Mariano Reingart <reing...@gmail.com> wrote:
>> >> To cache images, I'm trying to do:
>>
>> >> @cache(request.env.path_info,60,cache.ram)
>> >> def download(): return response.download(request,db)
>>
>> >> But seems that is not 
>> >> working:http://www.web2py.com.ar/raf10dev/default/index
>> >> (see images at sidebar, if you quickly reload pages, they fail)
>>
>> >> The book says something about response.render, but nothing about 
>> >> download...
>> >> Anyway, I'm not sure if this is a good use of @cache, are there any other 
>> >> way ?
>>
>> >> BTW, why Cache-Control: no?...
>>
>> >> Best regards,
>>
>> >> Mariano 
>> >> Reingarthttp://www.sistemasagiles.com.arhttp://reingart.blogspot.com
>

Reply via email to