【发布时间】:2011-01-08 18:25:24
【问题描述】:
似乎有两种不同的方法可以使用 HTTP 标头实现条件请求,这两种方法都可以用于缓存、范围请求、并发控制等......:
- If-Unmodified-Since 和 If-Modified-Since,客户端发送资源的时间戳。
- If-Modified 和 If-None-Modified,客户端发送资源的 ETag 表示。
在这两种情况下,客户端都会发送一条它所拥有的有关资源的信息,这使服务器可以确定自客户端上次看到资源以来资源是否发生了变化。然后服务器根据客户端提供的条件头来决定是否执行请求。
我不明白为什么有两种不同的方法可用。当然,ETag 会取代时间戳,因为服务器可以很容易地选择从时间戳生成 ETag。
所以,我的问题是:
- 在哪些情况下,您可能更喜欢 If-Unmodified-Since/If-Modified-Since 而不是 ETag?
- 在哪些情况下您可能需要两者?
【问题讨论】:
-
虽然可能是相切的,但还有另一种方法可以发出条件请求:If-Range。它可以使用 ETage 或时间戳。
标签: http rest http-headers etag if-modified-since