Emi*_*ien 5 python google-app-engine http httphandler
我将用户上传的图像存储在Google App Engine数据存储区中db.Blob,如文档中所建议的那样.然后,我将这些图像提供给/images/<id>.jpg.
服务器总是发送200 OK响应,这意味着浏览器必须多次下载相同的图像(==较慢),并且服务器必须多次发送相同的图像(==更昂贵).
由于大多数图像可能永远不会改变,我希望能够发送304 Not Modified回复.我正在考虑在用户上传时计算图片的某种哈希值,然后使用它来知道用户是否已经拥有此图像(可能将哈希发送为Etag?)
我找到了这个答案和这个答案很好地解释了逻辑,但我有两个问题:
EtagGoogle App Engine?class StaticContentHandler(webapp.RequestHandler):
def output_content(self, content, serve=True):
self.response.headers['Content-Type'] = content.content_type
last_modified = content.last_modified.strftime(HTTP_DATE_FMT)
self.response.headers['Last-Modified'] = last_modified
self.response.headers['ETag'] = '"%s"' % (content.etag,)
if serve:
self.response.out.write(content.body)
else:
self.response.set_status(304)
def get(self, path):
content = get(path)
if not content:
self.error(404)
return
serve = True
if 'If-Modified-Since' in self.request.headers:
last_seen = datetime.datetime.strptime(
self.request.headers['If-Modified-Since'],
HTTP_DATE_FMT)
if last_seen >= content.last_modified.replace(microsecond=0):
serve = False
if 'If-None-Match' in self.request.headers:
etags = [x.strip('" ')
for x in self.request.headers['If-None-Match'].split(',')]
if content.etag in etags:
serve = False
self.output_content(content, serve)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3532 次 |
| 最近记录: |