我正在从googleappengine服务器提供一些JSON内容。我需要为内容提供一个ETAG,以便知道自从上次加载数据以来它是否发生了变化。然后我的应用程序将删除它的旧数据并使用新的JSON数据来填充它的视图。在
self.response.headers['Content-Type'] = "application/json; charset=utf-8"
self.response.out.write(json.dumps(to_dict(objects,"content")))
为响应设置etag的最佳实践是什么?我需要自己计算ETAG吗?或者这是一种让HTTP协议来实现这一点的方法?在
你必须自己计算e-tag值。E-tags是只对应用程序有意义的不透明字符串。在
最佳实践是将决定JSON内容的所有输入变量(转换为字符串)串联起来;如果发生任何更改,将导致JSON输出发生更改的内容,都应该是其中的一部分。如果这些字符串中有任何不想公开的敏感信息,请改用MD5散列值。在
例如,在我管理的CMS应用程序中,首页有以下电子标签:
我们关心的输入变量已经用
|
符号连接成一个不透明的值,但是它确实代表了几个不同的输入值,例如最后修改的时间戳(数字)、浏览器接受的语言头、当前的视觉主题,以及从浏览器cookie中检索的内部UID(它决定了首页内容的上下文)。如果这些变量中的任何一个发生变化,那么页面可能会不同,缓存的副本也会过时。在请注意,如果没有快速验证的手段,电子标签是无用的。客户机将它包含在
If-None-Match
请求头中,服务器应该能够根据当前变量快速重新计算e-tag头,并查看标记是否仍然是当前的。如果重新计算所需的时间与重新生成内容主体所需的时间相同,那么发送304 Not Modified
响应而不是200 OK
响应中的完整JSON主体只节省了一点带宽。在如果您使用的是webapp2,它可以根据响应主体自动添加md5etag。在
http://webapp-improved.appspot.com/guide/response.html
相关问题 更多 >
编程相关推荐