我的问题很简单。虽然在搜索时,我没有找到一个简单的令人满意的答案。
我正在使用 Jquery ajax 请求从服务器获取数据。服务器托管一个将 Etag 和 Cach-control 标头设置为
GET requests
. 服务器还设置 CORS 标头以允许Etag
. Api 的客户端是一个浏览器网络应用程序。我正在使用 Ajax 请求来调用 Api。以下是简单 GET 请求后来自服务器的响应标头:
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
我只想知道:
我是否需要手动收集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 无关。