问题标签 [if-none-match]
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.
http - 何时发送“if-none-match”请求?
在优化我们网站的缓存行为时,我注意到大量的if-none-match
请求被发送到我们的网站。据我了解缓存,只要缓存仍然有效,情况就不应该如此。
一个特定的请求会生成以下内容response-header
:
如您所见,缓存的有效期应为 300 天。按照我的理解,浏览器应该在那段时间直接使用它的缓存。只有在这段时间结束后,它才会发出带有 header 的请求if-none-match
。但是浏览器似乎忽略了这一点,if-none-match
并在每次加载页面时发送这个 -request 只是为了接收304-response ("Not Modified")
.
我需要更改什么以防止浏览器发送这些无用的请求?
ajax - 如果服务器发送 Etag,是否需要在 ajax 请求中以编程方式设置 if-no-match
我的问题很简单。虽然在搜索时,我没有找到一个简单的令人满意的答案。
我正在使用 Jquery ajax 请求从服务器获取数据。服务器托管一个将 Etag 和 Cach-control 标头设置为
GET requests
. 服务器还设置 CORS 标头以允许Etag
. Api 的客户端是一个浏览器网络应用程序。我正在使用 Ajax 请求来调用 Api。以下是简单 GET 请求后来自服务器的响应标头:
我只想知道:
我是否需要手动收集Etag
从服务器发送的响应标头并将标头附加到 ajax 请求?或者浏览器在具有“Etag”if-no-match
的请求中默认发送它conditional get
我已经在浏览器中通过网络控制台进行了调试,似乎浏览器正在
conditional GET
自动执行并设置if-no-match
标题。如果是正确的,假设我创建了一个新资源,然后我调用了 get 请求。它第一次给了我过去缓存的数据。但是当我重新加载页面时,它会提供更新的页面。所以我很困惑,如果服务器端的数据集发生了变化并且发送了不同
Etag
的数据,为什么浏览器不会从服务器获取更新的数据集,除非我必须重新加载
- 在分页的情况下也是如此。假设我有一个 URL
/users?next=0
。每个新请求next is a query param
的更改值。next
因为每个响应都会得到自己的“Etag”。浏览器会根据请求存储“Etag”还是只存储Etag
上一个获取请求的最新请求,而与 URL 无关。
rest - Etag 令牌如何在 HTTP 的条件 GET 中工作?
所以基本上我想了解请求中 If-None-Match 标头中 ETag 令牌值的工作。
我已经了解了If-modifies-since条件 GET 方法的工作原理。有人可以简单地解释条件 GET 在具有If-None-Match条件的 Etag 的情况下如何工作吗?
提前致谢 :)
firefox-os - 更新后的 FirefoxOS 市场(Fx0 设备)
我和至少其他一些用户在更新市场后无法使用市场。手机加载了应用程序,但页面就在那里。我跟踪了网络,发现服务器没有返回任何内容。如果我删除标题If-None-Match
,我会得到响应。清除缓存、更改系统日期并不能解决问题。有人可以帮我解决这个问题吗?
android - 如何在 android 上使用 OkHttp 的 ETag 和 If-None-Match
我使用我的应用程序中的 OkHttpClient (v3.0.1),但 ETag 和 If-None-Match 不起作用。</p>
例如:
首先 获取http://112.4.19.67/task/imags_avatar/20130607165126605.png
作为回应,我得到了 ETag 和 Last-Modified。
要求:</p>
回应:</p>
第二次 获取相同的网址:http: //112.4.19.67/task/imags_avatar/20130607165126605.png
我认为我可以看到请求中的 If-None-Match。但它不存在。
要求:</p>
回复:
我的代码
提前感谢您的帮助。
ios - ETag 和 If-None-Match HTTP 标头不起作用
我的网络服务器中有一个文件,每次访问它时我都会将其下载到我的应用程序中,因为文件内容可能会被更改但如果它被更改,我只想下载那个时间,这样可以节省带宽,幸运的是这就是此ETag和If-None-Match 标头字段用于。
- 当我第一次发出请求时,我从 HTTP 响应标头中检索ETag
笔记:
当我在 chrome 中的Advanced REST Client Application中尝试上述步骤时,它可以正常工作,但是当我在 iOS 中尝试时,我总是得到响应代码 200,但它应该给我 304 用于后续请求。
这是我使用的示例代码
这是回复
响应:可选({ URL: http: //10.12.1.101/Etag/ringtone1.mp3 } {状态代码:200,标头{“接受范围”=字节;连接=“保持活动”;“内容长度” = 221552;“内容类型”=“音频/mpeg”;日期=“格林威治标准时间 2016 年 2 月 24 日星期三 14:57:53”;Etag =“\”36170-52c1cc36d9b40\“”;“保持活动”=“ timeout=5, max=100"; "Last-Modified" = "Fri, 19 Feb 2016 10:15:33 GMT"; Server = "Apache/2.4.16 (Unix) PHP/5.5.29"; } })
我在这里做错了什么?
javascript - 获取 Etag 并在设置为 If-None-Match 标头的后续请求中使用它的最佳方法是什么?
我在这方面看到了很多其他问题,但由于 Node.js 是一种服务器端语言,“Etag 支持”似乎是指一个 nodejs 应用程序创建、发送和处理要返回给他们的客户端的代码。在我的情况下,当我将 Etag 值与If-None-Match
标头匹配以发送回用于查看资源是否发生变化的其他请求。
此外,在这种情况下,正确的术语是什么。我是客户,我的移动应用程序用户是我的客户,所以他们是客户的客户吗?
我使用reqest,想知道是否有比设置局部etag
变量更简单的方法,如果没有设置,则检查它是否已设置,然后使用一组没有空的标题'If-None-Match'
和另一组带有它的标题,并在您在响应中抓取它时使用它像这样抓住
然后必须在函数中抓取并返回它returnEtag()
并在第二组标题中使用它,依此类推。
这变得一团糟,更不用说我必须通过我的整个应用程序执行此操作,以便etag
以更简单/更容易的方式管理每个不同请求的每个请求。是否有任何模块支持开箱即用地处理这个问题?
文档说明我应该执行以下操作
所有响应都返回一个 HTTP Cache-Control 标头。它的内容表示可以使用多长时间的缓存响应来减少不必要的 API 请求。访问此 API 的客户端必须注意此信息。
除此之外,每个响应都会返回一个 HTTP ETag 标头。它的内容将用于 HTTP If-None-Match 标头中对同一资源的后续请求。如果缓存的信息仍然有效,API 将返回状态代码 304 Not Modified。访问此 API 的客户端必须使用此技术,也称为条件 GET。
我使用我自己的服务器来访问此 API,然后将该数据保存到可以在移动应用程序上访问我的用户的火力库(将应用程序与其他公司 api 的密钥远离移动应用程序用户)。
android - Android OkHttp如何处理ETag
我正在尝试使用 OkHttp 做 Android 离线缓存方法。流程是这样的:
- 我在标头字段中向服务器发送一个带有 ETag 空字符串的 HTTP 请求,
if-none-catched
服务器返回一个正确的 ETag。 - 然后我存储 ETag 并缓存响应。
- 下次当我触发相同的服务调用时,我会得到相同的 ETag 并将其设置为 HTTP 请求标头,如果 ETag 相同,服务器将返回 HTTP 304。
我现在的问题是如何存储和检索 ETag?OkHttp 默认会处理还是我需要在 SQLite 中存储?我一直在谷歌上寻找 OkHttp 实现 ETag 示例代码,但我得到的只是普通的缓存方法。我参考的链接:
- 我正在尝试使用 Java 的 HttpURLConnection 进行“条件获取”,但我从未得到 304 状态码
- https://github.com/square/okhttp/wiki/Interceptors
- 在Android中为OkHttp设置缓存的正确方法
- https://gist.github.com/polbins/1c7f9303d2b7d169a3b1#file-restcontroller-java-L45
到目前为止,我实现的只是第一次服务调用的缓存,但不再从服务器获取最新数据。欣赏是否有人可以提供一些指导或找到任何处理 ETag 和if-none-catch
动态供 OkHttp 分享的好例子。任何澄清随时问。
java - OkHttp If-None-Match 标头丢失
我正在创建一个使用 OkHttp 网络库作为 HTTP 客户端的 Android 应用程序。我共享一个OkHttpClient
缓存大小为 10 MB 的实例。流程是:我向服务器发送请求,服务器对其进行处理并生成ETag
标头,OkHttp 应该将其If-None-Match
连接到以下对同一 URL 的请求中的标头中。问题是If-None-Match
请求的标头中缺少标头,因此Response.cacheResponse()
总是返回null
. 所以我的问题是:如何解决这个问题以使用响应缓存?
OkHttpClientSingleton.java:
发送请求代码片段:
可以在此处查看来自网络拦截器的两个相同请求的日志。
我在互联网上发现了很多类似的问题,但没有一个能帮助我解决这个问题。
任何帮助将非常感激。
etag - 带有接受语言的 ETag
我有一个 Web 服务,它为每个响应添加一个 ETag,以便将来的调用可以使用 HTTP 304(未修改)状态。我生成的 ETag 实际上只是查询类型的 Base64 编码以及时间戳。
我遇到的问题是浏览器是否请求具有不同接受语言的相同资源。浏览器当前发送相同的 If-None-Match 标头,因此响应是 304,即使实际资源会以不同的语言返回。所以我认为这样做的方法是添加一个 Vary Header,以向客户端指定响应随 Accept & Accept-Language 的不同而不同,如下所示。
变化:接受,接受-语言
但是,无论接受语言如何,我的浏览器 (Chrome) 都使用相同的 ETag。在这里使用的正确约定是什么?
谢谢