问题标签 [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.
rest - javax Request object not evaluating precondition for If-None-Match header
I am running a REST service in Wildfly and I am attempting to use the Request.evaluatePreconditions
method to generate a 304 Not Modified
response.
I am passing an eTag value in the request's If-None-Match
header, but the evaluatePreconditions
method is not generating the 304
response even when the EntityTag matches the value in the If-None-Match
header.
Here is the code:
ResponseData.getStatusCode ()
returns anint
that corresponds to an HTTP status code.ResponseData.getEntities ()
returns aList
of serializable objects.ResponseData.getETag ()
returns aString
that contains a hash that corresponds to the entity objects returned bygetEntities
.
Here's my request to the server:
Here's the response header from the server:
As you can see, the ETag value in the response header matches the value in the If-None-Match
request header. Why am I not receiving a 304 Not Modified
response?
internet-explorer - Internet Explorer 11 中 302 重定向后的 If-None-Match 标头
我们正在使用ETag
和If-None-Match
headers 来提高单页应用程序在初始加载时的性能。我注意到,当服务器发送重定向(303 或 302)时,Internet Explorer 的反应方式与 Firefox 和 Chrome 不同。
观察:
当服务器为给定页面发送 302 代码以指示应重新加载页面时(位置标头指向同一页面)。然后 IE 使用它的缓存版本(它发送If-None-Match
并获得 304 答案),Firefox 和 Chrome 认为应该重新加载页面。
使用一个简单的服务器,该服务器始终发送相同的页面(具有弱ETag
值),除了将重定向(302 代码)发送到同一页面的每个 fith 响应。
火狐:
铬合金:
互联网浏览器 11:
问题:
这是预期的行为吗?是否有可能强制 IE 重新加载页面?
错误的解决方案:
根据我在 StackOverflow 上阅读的答案:
我曾尝试发送Expires
,Cache-Control
当我发送 302 重定向请求时,IE 会:
- 用户请求 (F5),响应是带有标头的 302 代码
Expires: -1
和Cache-Control: must-revalidate, private
- 请求跟随重定向,请求带有 header
If-None-Match
,响应是一个 304 代码。 - 用户请求 (F5),没有标头
If-None-Match
,响应是 200 代码。
实验代码:
我改编了Jetty Hello-World示例:
依赖:
背景:
这个例子真的很简约。在我们的生产环境中,302 重定向是由登录模块生成的。问题是有时,IE 只是显示一个白色窗口而不是页面内容。
python - 如果在python中没有
我是 python 新手,我的第一个程序出现语法错误。你能帮忙更正语法吗?
引发语法错误 -
scala - scalaj etag get 无法解析
使用scalaj.http 2.4 我无法If-None-Match
为这个简单的调用获得正确的 etag 代码:
我期待一个304 Not Modified
,但我得到一个200
。
javascript - Safari 并不总是发送 If-None-Match 以获取页面加载
我有一个模拟项目,我在不同的浏览器上进行测试Etag
和If-None-Match
行为。在Get
页面加载时发送请求,我将始终响应200
并分配一个新Etag
值。
Java服务器端:
我明白这不是我的预期用途,Etags
但请容忍我。在 Chrome 和 Firefox 上,这可以按预期工作。在每个页面加载时,请求都包含If-None-Match
标题。但是,在 Safari 上,标头仅包含在所有其他请求中。我知道有几个关于Etags
和If-None-Match
和 Safari 的问题,但它们都是关于它的完全缺席。在我的情况下,第一个请求不包含If-None-Match
(如预期的那样),第二个请求会,但第三个请求不会。然后它在发送标头和不发送标头之间摇摆不定。我修改了我的代码以返回304
是否If-None-Match
存在标头,这会提示 Safari 随每个请求发送标头,但它不会更新Etag
分配新的值。我知道这是预期的行为,但是当我返回 200 和 new 时,有没有办法让 Safari 表现得像 chrome 和 Firefox Etag
?
android - Okhttp 在使用 Etags 时不返回缓存的响应
我有一个简单的用例,其中服务器为请求返回Etag,并且该 etag 作为标头(即If-None-Match
)添加到所有后续 url 请求中。如果响应有变化,服务器可以用 a200
响应或以304
其他方式响应。对于后者,重用来自缓存的响应是有意义的。但是 okhttp 总是null
作为缓存的响应返回。
我进行了一些故障排除,并且响应由 okhttp 在内部写入磁盘,但CachingStrategy
不会将其返回到CacheInterceptor
. 仔细查看CachingStrategy
该类,有文档专门说明不会使用缓存:
有没有办法解决这种行为并使用缓存的响应?
(我已启用缓存,如此处所述,并且我使用的是 okhttp 版本3.10.0
)
另外,奇怪的是我不得不手动添加 Etag。Okhttp 无法自行将 etag 添加到后续请求中。
编辑- 更正,Okhttp 正确添加了 etag 标头。我需要使用网络拦截器而不是常规拦截器来查看 etag 标头被添加到后续请求中
与这些问题有些相关:
caching - 如何使用 scrapy 或任何其他工具抓取使用 if-non-match 和 cookie 的页面?
我正在尝试抓取一个返回 JSON 对象的 API,但它只在第一次返回 JSON 之后,它没有返回任何内容。我正在使用带有 Cookie 的“if-none-match”标头,但我想在没有 Cookie 的情况下这样做,因为我有很多此类 API 可以抓取。
这是我的蜘蛛代码:
这是您可以在浏览器上看到输入的页面网址:https ://shopee.com.my/Baby-Toddler-Play-cat.27.23785?page=0&sortBy=sales
这是您也可以从该页面的开发人员工具中找到的 API 网址:https ://shopee.com.my/api/v2/search_items/?by=sales&limit=50&match_id=23785&newest=0&order=desc&page_type=search&version=2
请告诉我如何处理“缓存”或“如果不匹配”,因为我不明白如何处理它。提前致谢!
python - 如何在python中发送带有scrapy或请求的if-none-match标头?
我正在使用 Scrapy 抓取一个网站,但其中一些 API 没有返回没有“if-none-match”标头的 JSON 数据。
我有超过 100 个 API 列表,因此我想生成自动标头以获取有效的 JSON 文件。任何人都知道如何处理这个问题,或者有任何其他方法可以摆脱它。
提前致谢。
header - 如果在邮递员标头中添加了 if-non-match,则获取差异响应
嗨,我正在努力解决这个问题,
- 如果我没有在邮递员标头中添加具有正确值的 if-non-match 标头,则响应错误如下
我不能先在浏览器中发送请求,然后每次都获取标题并粘贴到邮递员中......
感谢您的阅读。
http - 在 HTTP 中使用 Etag 有很多好处吗?
在查看etag周围的Flask(werkzeug)源码时,发现它生成一个响应对象,通过sha1从数据中生成etag,与请求的if-none-match etag进行比较,返回304或200。因此,无论是否有 etag,访问数据库和创建响应的过程都是相同的,而 etag 的好处就是不必向客户端发送数据。
当然,如果你有大量的数据,那是有好处的,但是如果数据没有那么大,是不是就认为没什么用呢?
与其从每个请求的响应中重新创建etag,我认为最好将etag存储在redis或服务器内存等中,当作为请求目标的对象发生变化时,并在发出请求时将其与预先存储的 etag 进行比较。
这种缓存方式不经常使用吗?