我正在编写一个Django视图,它可以获取wordpress系统的最新博客文章。
def __get_latest_blog_posts(rss_url, limit=4):
feed = feedparser.parse(rss_url)
return something我尝试在终端中使用ETags:
>>> import feedparser
>>> d = feedparser.parse("http://a real url")
>>> d.etag
u'"2ca34419a999eae486b5e9fddaa2b2b9"'
>>> d2 = feedparser.parse("http://a real url", d.etag)我希望避免为web应用程序的每个用户请求提要。也许etag不是最好的选择?一旦第一个用户看到此视图,我是否可以存储etag并将其用于所有其他用户?是否每个用户都有一个线程,因此我不能以这种方式共享变量的值?
发布于 2014-05-09 18:04:10
Etag允许标记web资源的唯一状态,这样您就有机会请求表示您已经拥有的最新状态的资源。
但是如果你的客户端已经有了某个版本,你必须在第一时间获取它,所以对于第一个请求来说,使用etag是不相关的。
参见HTTP Etag at wikipedia,它解释了一切。
典型的场景是:
If-None-Match。服务器会检查,如果有新的东西,如果你提供的Etag和当前资源版本的Etag是相同的,它不会返回完整的页面,而是返回HTTP状态码304 Not Modified。如果页面在服务器上具有不同的状态,您将获得具有HTTP状态代码200的页面,并在响应头中具有新值Etag。如果你想优化你的应用程序而不是生成每个用户对相同提要的初始请求,你应该以某种方式在你的应用程序中全局共享给定资源的Etag值。
发布于 2014-05-09 18:11:33
在第一个请求中,客户端永远不能使用任何本地缓存,所以在第一个请求中不需要ETag。请记住,ETag需要传入条件请求头部(If-None-Match、If-Match等),非条件请求的语义是清晰的。
如果您的提要是公共提要,那么中间缓存代理也可以为非条件请求返回ETagged结果,尽管如果条件标头不匹配,它将始终必须联系源服务器。
https://stackoverflow.com/questions/23560658
复制相似问题