- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
似乎有两种截然不同的方法可以使用 HTTP header 来实现条件请求,这两种方法都可以用于缓存、范围请求、并发控制等......:
在这两种情况下,客户端都会发送一条它拥有的关于资源的信息,这允许服务器确定自客户端上次看到资源以来资源是否发生了变化。服务器然后根据客户端提供的条件 header 决定是否执行请求。
我不明白为什么有两种不同的方法可用。当然,ETag 会取代时间戳,因为服务器可以很容易地选择从时间戳生成 ETag。
所以,我的问题是:
最佳答案
我曾经思考过同样的事情,并意识到有一个非常重要的区别:日期可以排序,而 ETag 不能。
这意味着如果某些资源在一年前被修改过,但从那以后就没有修改过,而且我们知道这一点。然后我们可以正确地回答去年任意日期的 If-Unmodified-Since 请求,并同意确定......自该日期以来一直未修改。
Etag 仅在身份上具有可比性。要么相同,要么不同。如果您拥有与上述相同的资源,并且在这一年中,docroot 已移动到新的磁盘和文件系统,为所有文件提供新的 inode,但保留修改日期。并且有人将 ETag 基于文件的 inode 编号。那么我们不能说旧的 ETag 仍然可以,如果没有过去仍然可以的 ETag 的日志。
所以我不认为它们会相互淘汰。它们适用于不同的情况。您可以轻松获得您将要提供服务的页面中所有数据的最后修改日期,或者您可以轻松获得您将提供的内容的 ETag。
如果您有一个包含大量数据库查找数据的动态网页,如果不让您的数据库包含大量修改日期,则可能很难判断最后修改日期是什么。但您始终可以对结果呈现页面进行 md5 校验和。
在支持这些缓存协议(protocol)时,我肯定只选择其中一种,绝不会同时选择两种。
关于http - If-Unmodified-Since/If-Modified-Since 有什么意义?它们不是被 ETag 取代了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2126807/
我有一些计件工作是由不同的自定义(源代码不可用)框架完成的,这些框架返回 Map 实例。不幸的是,这些框架在返回用 Collections.unmodifiableMap 包装的 Map 实例时并不一
假设我们有一个 List>并想让它完全不可修改。只需将其传递给 Collection.unmodifiableList这还不够,因为内部列表仍然可以修改。 我会采用以下方法: List> someLi
在考虑效率、代码可读性和其他标准时,公开集合的只读 View 的更好方法是什么?从效率的角度来看,使用 methodA 而不是 methodB 真的有什么区别吗?请考虑可能经常访问 list 的情况
我正在使用一个 IDE,它在一些已生成但强烈需要的库文件中生成一个版本。因此,如果我想将库与多个版本一起使用,或者我看到大量实际上毫无意义的更改,就会出现问题。 总结:我想忽略一个或多个文件的单行,我
我从https://git-scm.com/book/en/v2/Getting-Started-What-is-Git%3F读到有关gitt中的三种状态 它在这里说Git具有文件可以驻留在其中的三个
我在使用来自 json 的 Jackson 序列化时遇到问题,如何从 Collections.unmodifiableMap 序列化? 我得到的错误是: com.fasterxml.jackson.d
这是导致问题的Streambuilder的builder方法内的代码: List users = snapshot.data; users.sort((user1, user2) => (user1.
private final Map q; public Info() { this(Collections.EMPTY_MAP); } public Info(final Map q) {
我找不到关于 Readline 选项 show-all-if-ambiguous 和 show-all-if-unmodified 之间区别的明确解释,以及是否它们影响不同的事物或相互排斥。关于这个主
我有一个不可修改的 map ( Map )。这包含一个键值对,其中值应该是一个列表,但对于特定键,值是一个空列表。 如何从 map 中删除该空列表并返回? 我已经使用谓词完成了它,它检查值是否是集合的
HTTP Spec (RFC-2616)在第 14.28 节中指出,If-Unmodified-Since header 必须由 HTTP 服务器识别,并且它只有一秒的精度。 如果资源更改频率超过每秒
您知道 If-Unmodified-Since 在野外的任何实际用途吗?来自description , 看起来这个 header 是为了帮助避免脏写。即仅当自客户端可用的最后修改时间以来未修改此资源时
我正在尝试创建一个不可变项目的不可变列表。我已经看到并尝试了 built_collection 中的 BuiltList,现在我看到了 List.unmodifiable。 它们是否等同,即使用它们我
是否有可能以文本形式获取当前 HTML 文档的源代码,与加载时完全一样? (即不是解析和 DOM 操作后的“生成的源代码”。) 注意:发出额外的 AJAX 请求以再次检索 HTML 页面在这种情况下不
我在 StatelessWidget 中有一个 ListView。它有项目,每个项目都包含一个复选框。当有人检查一个项目时,我希望 ListView 将其作为参数发送到另一个页面。但是当我这样做时,它
在 TFS 中,我正在执行以下操作。 UnShelve Pending Changes-->右键单击ShelveSet中的文件-->选择Compare-->共有三种选择: 未修改版本 带工作区版本 最
我经常运行一种验证模式,在这种模式中,某些变量必须包含前缀数量的值之一才能有效。 PSEUDO CODE: IF x == CONSTANT_1 || X == CONSTANT_2 || .
我最近将我的 Android Studio 更新到 1.0.1 并且不喜欢它表示项目结构的新方式: 如何恢复到项目 View 中显示未修改的文件系统目录布局的前一种安排? 最佳答案 查看您的第一个屏幕
在 Dart 中,如果要创建不可修改的列表,可以使用 List.unmodifiable() 或 UnmodifiableListView List list = [1, 2, 3]; List un
在 Dart 中,执行 List.unmodifiable(someList)和 Map.unmodifiable(someMap)创建一个不可修改的 查看 ,还是一个全新的独立列表/ map ?我猜
我是一名优秀的程序员,十分优秀!