问题标签 [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.

0 投票
1 回答
389 浏览

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 an int that corresponds to an HTTP status code.
  • ResponseData.getEntities () returns a List of serializable objects.
  • ResponseData.getETag () returns a String that contains a hash that corresponds to the entity objects returned by getEntities.

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?

0 投票
0 回答
834 浏览

internet-explorer - Internet Explorer 11 中 302 重定向后的 If-None-Match 标头

我们正在使用ETagIf-None-Matchheaders 来提高单页应用程序在初始加载时的性能。我注意到,当服务器发送重定向(303 或 302)时,Internet Explorer 的反应方式与 Firefox 和 Chrome 不同。

观察:

当服务器为给定页面发送 302 代码以指示应重新加载页面时(位置标头指向同一页面)。然后 IE 使用它的缓存版本(它发送If-None-Match并获得 304 答案),Firefox 和 Chrome 认为应该重新加载页面。

使用一个简单的服务器,该服务器始终发送相同的页面(具有弱ETag值),除了将重定向(302 代码)发送到同一页面的每个 fith 响应。

火狐:

Firefox - 网络选项卡

铬合金:

Chrome - 网络标签

互联网浏览器 11:

IE 11 - 网络选项卡

问题:

这是预期的行为吗?是否有可能强制 IE 重新加载页面?

错误的解决方案:

根据我在 StackOverflow 上阅读的答案:

我曾尝试发送ExpiresCache-Control当我发送 302 重定向请求时,IE 会:

  • 用户请求 (F5),响应是带有标头的 302 代码Expires: -1Cache-Control: must-revalidate, private
  • 请求跟随重定向,请求带有 header If-None-Match,响应是一个 304 代码。
  • 用户请求 (F5),没有标头If-None-Match,响应是 200 代码。

IE 11 - 网络选项卡

实验代码:

我改编了Jetty Hello-World示例:

依赖:

背景:

这个例子真的很简约。在我们的生产环境中,302 重定向是由登录模块生成的。问题是有时,IE 只是显示一个白色窗口而不是页面内容。

0 投票
1 回答
136 浏览

python - 如果在python中没有

我是 python 新手,我的第一个程序出现语法错误。你能帮忙更正语法吗?

引发语法错误 -

0 投票
1 回答
74 浏览

scala - scalaj etag get 无法解析

使用scalaj.http 2.4 我无法If-None-Match为这个简单的调用获得正确的 etag 代码:

我期待一个304 Not Modified,但我得到一个200

0 投票
0 回答
528 浏览

javascript - Safari 并不总是发送 If-None-Match 以获取页面加载

我有一个模拟项目,我在不同的浏览器上进行测试EtagIf-None-Match行为。在Get页面加载时发送请求,我将始终响应200并分配一个新Etag值。

Java服务器端:

我明白这不是我的预期用途,Etags但请容忍我。在 Chrome 和 Firefox 上,这可以按预期工作。在每个页面加载时,请求都包含If-None-Match标题。但是,在 Safari 上,标头仅包含在所有其他请求中。我知道有几个关于EtagsIf-None-Match和 Safari 的问题,但它们都是关于它的完全缺席。在我的情况下,第一个请求不包含If-None-Match(如预期的那样),第二个请求会,但第三个请求不会。然后它在发送标头和不发送标头之间摇摆不定。我修改了我的代码以返回304是否If-None-Match存在标头,这会提示 Safari 随每个请求发送标头,但它不会更新Etag分配新的值。我知道这是预期的行为,但是当我返回 200 和 new 时,有没有办法让 Safari 表现得像 chrome 和 Firefox Etag

0 投票
1 回答
449 浏览

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 标头被添加到后续请求中

与这些问题有些相关:

0 投票
1 回答
404 浏览

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

请告诉我如何处理“缓存”或“如果不匹配”,因为我不明白如何处理它。提前致谢!

0 投票
1 回答
429 浏览

python - 如何在python中发送带有scrapy或请求的if-none-match标头?

我正在使用 Scrapy 抓取一个网站,但其中一些 API 没有返回没有“if-none-match”标头的 JSON 数据。

我有超过 100 个 API 列表,因此我想生成自动标头以获取有效的 JSON 文件。任何人都知道如何处理这个问题,或者有任何其他方法可以摆脱它。

提前致谢。

0 投票
0 回答
39 浏览

header - 如果在邮递员标头中添加了 if-non-match,则获取差异响应

嗨,我正在努力解决这个问题,

  1. 如果我没有在邮递员标头中添加具有正确值的 if-non-match 标头,则响应错误如下

当使用 if-non-match 标头时,响应是正确的 Home Appli --> Home Appliance。

我不能先在浏览器中发送请求,然后每次都获取标题并粘贴到邮递员中......

感谢您的阅读。

0 投票
1 回答
35 浏览

http - 在 HTTP 中使用 Etag 有很多好处吗?

在查看etag周围的Flask(werkzeug)源码时,发现它生成一个响应对象,通过sha1从数据中生成etag,与请求的if-none-match etag进行比较,返回304或200。因此,无论是否有 etag,访问数据库和创建响应的过程都是相同的,而 etag 的好处就是不必向客户端发送数据。

当然,如果你有大量的数据,那是有好处的,但是如果数据没有那么大,是不是就认为没什么用呢?

与其从每个请求的响应中重新创建etag,我认为最好将etag存储在redis或服务器内存等中,当作为请求目标的对象发生变化时,并在发出请求时将其与预先存储的 etag 进行比较。

这种缓存方式不经常使用吗?