如果服务器发送Etag,是否需要在ajax请求中以编程方式设置匹配
我的问题很简单。虽然在搜索过程中,我没有找到一个简单的令人满意的答案 我使用jQueryAjax请求从服务器获取数据。服务器 托管一个rest API,该API将Etag和Cach控制头设置为如果服务器发送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
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