我正在编写一个 Django View ,用于获取 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)
我想避免为网络应用程序的每个用户请求提要。也许 etag 不是最好的选择? 第一个用户看到此 View 后,我可以存储 etag 并将其用于所有其他用户吗?是否每个用户都有一个线程,因此我无法以这种方式共享变量的值?
最佳答案
Etag 允许标记网络资源的唯一状态,以便您有机会请求表达您已有的最新状态的资源。
但是要在您的客户端上已有某个版本,您必须第一次获取它,因此对于第一个请求,使用 etag
无关。
参见HTTP Etag at wikipedia ,它解释了一切。
典型场景是:
- 首次获取您的页面并读取 Etag header 的值以供将来使用
- 下次请求同一页面时,您可以添加 header
If-None-Match
以及上次获取的 Etag 值。服务器会检查,如果有新的东西,如果你提供的Etag和当前版本资源的Etag相同,它不会返回完整的页面,而是返回HTTP Status code304 Not Modified
。如果页面在服务器上具有不同的状态,您将获得带有 HTTP 状态代码 200 的页面,并在响应 header 中包含新的 Etag 值。
如果您希望优化您的应用程序,不要为每个用户生成对同一 Feed 的初始请求,您应以某种方式在您的应用程序中全局共享给定资源的 Etag 值。
关于python - 在 feedparser 中使用 ETag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23560658/