如果服务器发送Etag,是否需要在ajax请求中以编程方式设置匹配

如果服务器发送Etag,是否需要在ajax请求中以编程方式设置匹配,ajax,jax-rs,etag,if-none-match,Ajax,Jax Rs,Etag,If None Match,我的问题很简单。虽然在搜索过程中,我没有找到一个简单的令人满意的答案 我使用jQueryAjax请求从服务器获取数据。服务器 托管一个rest API,该API将Etag和Cach控制头设置为GET请求。服务器还将CORS头设置为允许Etag。 Api的客户端是一个浏览器web应用程序。我使用Ajax请求来调用Api。以下是简单GET请求后服务器的响应头: 我只想知道: 我是否需要从服务器发送的响应头中手动收集Etag,如果没有匹配的头,则将其附加到ajax请求?或者浏览器在默认情况下在条件ge

我的问题很简单。虽然在搜索过程中,我没有找到一个简单的令人满意的答案

我使用jQueryAjax请求从服务器获取数据。服务器 托管一个rest API,该API将Etag和Cach控制头设置为
GET请求
。服务器还将CORS头设置为允许
Etag
。 Api的客户端是一个浏览器web应用程序。我使用Ajax请求来调用Api。以下是简单GET请求后服务器的响应头:

我只想知道:

我是否需要从服务器发送的响应头中手动收集
Etag
,如果没有匹配的
头,则将其附加到ajax请求?或者浏览器在默认情况下在
条件get
请求中发送它,如果它有“Etag”

  • 我已经在浏览器和It的网络控制台上进行了调试 似乎浏览器正在自动执行
    条件GET
    ,并且 设置不匹配时的
    标题

  • 如果正确,假设我创建了一个新资源,然后调用get请求。它第一次为我提供了过去的缓存数据。但当我重新加载页面时,它会给出更新的页面。因此,我感到困惑的是,如果服务器端的数据集已更改,并且它发送了不同的
    Etag
    ,为什么浏览器不从服务器获取更新的数据集,除非我必须重新加载

  • 同样在分页的情况下。假设我有一个URL
    /users?next=0
    next是一个查询参数
    ,其中
    next
    的值会因每个新请求而更改。因为每个响应都会有自己的“Etag”。浏览器将根据请求存储“Etag”,还是只存储上一个get请求的最新的
    Etag
    ,而不考虑URL

嗯,我自己不知怎么想出了解决办法:

当浏览器看到url在上一个
请求中有
电子标签
头时,它会发送
如果不匹配
头本身。浏览器保存与该URL相关的
e-tag
,因此无论发生多少个具有不同URL的请求

另外,还有一个技巧,可以强制浏览器获取一个
条件get
,以检查
电子标签

  • 将“最大年龄”标题设置为最低值
    (对于我来说,60年代的作品很棒)
  • 一旦
    缓存
    过期,浏览器将发送一个
    条件get
    ,以检查
    过期的缓存资源
    是否有效。如果
    如果不匹配
    标题与
    电子标签
    匹配。服务器使用
    304:notmodified
    头返回响应。这意味着过期的缓存资源是有效的,可以使用

我也面临同样的问题。我不能完全理解你是怎么解决的。我的问题是——我发出一个ajax请求,并将ETag和最后一次修改发送回响应头。但每当我刷新页面时,如果没有匹配项,并且如果因为请求头不存在而被修改。你能帮我解决这个问题吗。你是如何将ajax请求调用为:API调用??服务器是否为响应设置了适当的最大年龄和etag标记?
Status Code: 200 OK
Access-Control-Allow-Origin: *
Cache-Control: no-transform, max-age=86400
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: application/json
Date: Sun, 30 Aug 2015 13:23:41 GMT
Etag: "-783704964"
Keep-Alive: timeout=15, max=99
Server: Apache-Coyote/1.1
Transfer-Encoding: chunked
Vary: Accept-Encoding
access-control-allow-headers: X-Requested-With, Content-Type, Etag,Authorization
access-control-allow-methods: GET, POST, DELETE, PUT