首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在feedparser中使用ETag

在feedparser中使用ETag
EN

Stack Overflow用户
提问于 2014-05-09 17:06:45
回答 2查看 654关注 0票数 1

我正在编写一个Django视图,它可以获取wordpress系统的最新博客文章。

代码语言:javascript
复制
def __get_latest_blog_posts(rss_url, limit=4):
    feed = feedparser.parse(rss_url)
    return something

我尝试在终端中使用ETags:

代码语言:javascript
复制
>>> 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并将其用于所有其他用户?是否每个用户都有一个线程,因此我不能以这种方式共享变量的值?

EN

回答 2

Stack Overflow用户

发布于 2014-05-09 18:04:10

Etag允许标记web资源的唯一状态,这样您就有机会请求表示您已经拥有的最新状态的资源。

但是如果你的客户端已经有了某个版本,你必须在第一时间获取它,所以对于第一个请求来说,使用etag是不相关的。

参见HTTP Etag at wikipedia,它解释了一切。

典型的场景是:

  1. 第一次获取您的页面并读取Etag头的值以供将来使用
  2. 下次请求相同的页面时,您将添加带有上次获取的Etag值的header If-None-Match。服务器会检查,如果有新的东西,如果你提供的Etag和当前资源版本的Etag是相同的,它不会返回完整的页面,而是返回HTTP状态码304 Not Modified。如果页面在服务器上具有不同的状态,您将获得具有HTTP状态代码200的页面,并在响应头中具有新值Etag。

如果你想优化你的应用程序而不是生成每个用户对相同提要的初始请求,你应该以某种方式在你的应用程序中全局共享给定资源的Etag值。

票数 1
EN

Stack Overflow用户

发布于 2014-05-09 18:11:33

在第一个请求中,客户端永远不能使用任何本地缓存,所以在第一个请求中不需要ETag。请记住,ETag需要传入条件请求头部(If-None-Match、If-Match等),非条件请求的语义是清晰的。

如果您的提要是公共提要,那么中间缓存代理也可以为非条件请求返回ETagged结果,尽管如果条件标头不匹配,它将始终必须联系源服务器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23560658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档