问题标签 [if-modified-since]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 什么是处理来自服务器端的条件 HTTP GET 请求的好方法?即包含“If-Modified-Since”标头的 GET 请求?
我正在尝试控制来自我的服务器的资源缓存,并且我已经验证将以下标头放在我的 HTTP 响应上会导致浏览器按预期缓存资源。
当浏览器缓存中的资源过期时,来自该特定客户端的该资源的下一个 GET 包含然后将“If-Modified-Since”标头添加到 GET 请求中,该请求将发送到源服务器。
特别是在 Java webapp 上下文中,当它收到这些条件 GET 请求时,有什么好方法可以确定服务器端的资源是否已更改,以便它可以决定是返回 304 Not Modified 还是 200 OK 响应?
我有一些想法,但它们都是自定义解决方案,对我来说似乎是在重新发明轮子:
只需有一些自定义查询来检查资源的上次修改日期。(这是最明显的方法)
在服务器上有一个与资源更新状态独立保持同步的缓存,以便服务器可以非常快速地检查资源修改,可能使用 Spring Framework 中的 DB 表侦听器(这比必须更有效)每次都为每个客户端做一个查询,但是实现起来比较复杂)
express - etag 如何在 expressjs 中工作
Expressjs 自动发送 etags。我想知道etag是如何生成的。它是基于get例程动态生成的内容。或者有没有办法我可以维护它,甚至不经历生成内容的过程(动态内容 - 来自数据库)并将etag传回。
可能是一个中间件,它首先检查它是否是有效的会话 id,然后传回客户端提供的相同 etag,或者可能基于 url + 会话 id。这样它将是唯一的。并在那里结束请求,而不是通过整个数据库调用和所有这些东西。在这种情况下,我需要知道客户正在拨打 304 电话。
我可以使用 expires 标签。但是当会话结束时。如果有人打开它不应该允许的 url。所以我认为etag也应该基于会话ID。如果修改后如何在这种动态内容场景中工作。可以用吗。
internet-explorer - IE不尊重过期
IE(7 -10)似乎不尊重过期。我打开提琴手并正在检查。如果响应有一个 etag,那么它会执行 304,否则它会为在未来 1 年到期的资源执行 200。我也尝试设置最后修改。它似乎不起作用。在 chrome 中,当有一个过期标签时..它甚至不会发送到服务器(对于 304)它已经缓存了它。这是一些 Fiddler 标头
并带有电子标签
根据 Ruud 的建议..这是请求/响应
internet-explorer - Internet Explorer 不发送“If-Modified-Since”标头
我正在尝试使用 HTTP“If-Modified-Since”标头。
- 我的服务器使用“Last-Modified”标头响应每个 HTTP 请求。
- 当客户端再次发送相同的请求时,它会相应地更新“If-Modified-Since”标头。
这适用于 Chrome 和 Firefox,但不适用于 Internet-Explorer 11。
我尝试添加“Expires”标题并将其设置为“-1”,如此处所述。然而它也没有工作。
这些是响应标头:
有什么建议么?
TNX
html - Perl Mechanize : 获取页面修改后的响应页面?
我正在尝试检索使用 js 和数据库加载的页面。加载大约需要 2 到 3 分钟。我能够获得显示“请等待 2 到 3 分钟以加载页面”的页面。但加载后无法检索页面。
我已经尝试过以下方法:
1.)在机械化中使用镜像方法。但是响应内容没有被解码。因此该文件是乱码。(还尝试编写与镜像方法类似的方法来解码响应内容,但这也不起作用。未加载新内容。)
2.) 尝试添加请求标头“if-modified-since”。但是时间仍然相同,并且没有获取新内容。
任何指示或建议都会很有帮助。
蒂亚:)
rest - 基于 If-Modified-Since 标头修改 REST API 表示是否有效?
我想在我的 API 中实现“获取更改的值”功能。例如,假设我有以下 REST API 调用:
这得到了学校#7 的所有学生。不幸的是,这可能很多。因此,我想修改 API 以仅返回自特定时间以来已修改的学生记录。(用例是一个夜间进程从另一个系统运行,将所有学生从我的系统拉到他们的系统。)
我看到http://blog.mugunthkumar.com/articles/restful-api-server-doing-it-the-right-way-part-2/建议使用 if-modified-since 标头并返回如下表示:
- 搜索自 if-modified-since 标头中请求的时间以来更新的所有学生
- 如果有的话,用 200 OK 返回那些学生
- 如果该查询没有返回学生,则返回 304 Not Modified
我明白他想做什么,但这似乎是错误的做法。If-Modified-Since 标头(http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.24)的定义说:
If-Modified-Since request-header 字段与一种方法一起使用,使其有条件:如果请求的变体自此字段中指定的时间以来没有被修改,则不会从服务器返回实体;相反,将返回没有任何消息正文的 304(未修改)响应。
这对我来说似乎是错误的。我们不会返回 RFC 指示的表示或 304,而是一些混合。似乎客户端代码(或更糟糕的是,服务器和客户端之间的网络缓存)可能会误解含义并替换本地缓存值,而实际上它应该只是更新它。
所以,两个问题:
- 这是对标题的正确使用吗?
- 如果不是(我怀疑不是),最佳做法是什么?查询字符串参数?
c - 有没有办法检查程序最后一次运行的时间?(Unix 中的 C)
我正在用 C 编写一个程序/实用程序来查找(然后移动到新目录)当前目录中在上次运行该实用程序后已修改的文件。
我试图找出的是是否有办法找到该实用程序最后一次运行的时间。或者,一种在程序中存储时间的方法(以便将上次存储的时间与当前时间进行比较,然后将“上次”变量更新为当前时间)。
当我输入这个时,我突然想到我可以将时间写入文件(在实用程序运行时覆盖单个条目)并从程序中的文件中检索值,尽管我不知道这是否是最好的方法。
c - tm 结构中的 tm_mon 怎么可能导致分段错误?(C)
我正在编写一个程序来检查当前目录中的文件是否在 Unix 中经过一段时间后被修改。我用:
后来我有:
原谅荒谬的条件,为什么 clock->tm_mon 会导致没有 seg 故障,而 clock->tm_mon+1 会导致 seg 故障崩溃?使用我上面的代码,段错误发生在循环中的一个打印命令之后。如果我创建一个整数 b,将其设置为等于 clock->tm_mon 并添加一个,使用它代替 clock->tm_mon+1,我仍然会遇到段错误,但稍后会打印几次。
iyr、imonth 等是正确代表最近几年、几个月等的整数,并且我已经确认,无论我尝试做什么来解释当月的 +1,seg 错误都发生在循环中。我还确认没有任何东西超过 if 条件,并且在循环的其余部分中没有任何事情发生在 if 条件之后。
ios - iOS:如何知道 RSS 提要是否已更新?
我的 iOS 应用程序正在从 RSS 源下载数据。我知道我需要保存数据。
因为,应用程序必须远程下载数据——表格视图需要几秒钟来更新 RSS 数据项。
我希望它仅在 RSS 提要数据发生更改时才下载新数据。
我正在设置保存数据。但是,我不确定如何检查 RSS 提要是否已更新,而无需下载整个 RSS 提要。
是否有请求 rss 提要但只返回 pubBuildDate 的方法?
这意味着如果 pubBuildDate 比上次保存的构建日期更新——那么我会下载所有的 rss 提要并解析它。否则,我只会加载保存的数据。
更新 1:
当我从我的请求中取回 HTTP 标头时——状态码不存在,If-Modified-Since 也不存在。
我已经尝试设置 If-Modified-Since 的值并将其添加到 HTTP 标头响应中,但我没有任何运气让它工作。
我知道如果状态码是 200,那么这意味着什么都没有改变,如果你得到一个 304,那么就会有新的内容。
有谁知道如何发送 If-Modified-Since 以及 URL 请求?
ios - iOS:如果已修改,则发送带有请求的标头
有谁知道如何发送带有 url 请求的 If Modified since 标头?
我正在尝试取回一个状态代码,它会告诉我 RSS 页面是否已更新。
更新#1:我能够进行以下测试:
奇怪的是,如果我删除整个 iOS 应用程序并运行它,我会得到 304 状态码。但是,如果我注释掉添加 If-Modified-Since 值的行并重新运行它 - 然后我得到 200 但是当我取消注释该行并重新运行它时 - 然后 304 错误不会回来......这是一个200错误代码。恢复 304 错误的唯一方法是从我的 iPhone 设备上删除整个应用程序。
有什么想法吗?