浏览器未发送 If-None-Match 标头
Posted
技术标签:
【中文标题】浏览器未发送 If-None-Match 标头【英文标题】:If-None-Match Header not being sent by browsers 【发布时间】:2019-08-26 10:19:41 【问题描述】:由于每次登录时文件下载量很大,我正在尝试修复 Web 应用程序的性能。为此,我希望启用条件浏览器缓存,即如果 ETag 更改,则从服务器提供新副本,否则使用浏览器缓存。
通过java过滤器从服务器发送的响应头:
HTTP/1.1 200 OK
Cache-Control: max-age=25200, s-maxage=25200, private, must-revalidate
Date: Thu, 04 Apr 2019 15:12:28 GMT
Pragma: no-cache
Accept-Ranges: bytes
Content-Length: 875914
Content-Type: text/javascript
Last-Modified: Thu, 04 Apr 2019 12:05:21 GMT
X-XSS-Protection: 1; mode=block
Strict-Transport-Security: max-age=31536000; includeSubDomains
ETag: 040419095614
Cookie: JSESSIONID=*******; secure; HttpOnly
X-Frame-Options: SAMEORIGIN
在浏览器下一次调用时,发送的请求标头是:
GET ***.js HTTP/1.1
Host: *****
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/73.0.3683.86 Safari/537.36
Accept: */*
Referer: *****
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Cookie: JSESSIONID=*********
浏览器没有发送 If-None-Match 标头,因此用于验证 ETag 和发回 304 响应代码的服务器端代码失败,并且服务器始终向客户端发送新副本。
我尝试过其他 Cache-Control 标头,例如:
Cache-Control: no-cache, must-revalidate, max-age=0
但无济于事。 有人可以帮忙吗。此外,每当 ETag 更改时,Web 应用程序提供新鲜内容也非常重要。
【问题讨论】:
【参考方案1】:您的ETag
无效,因为它缺少specification 所需的双引号。试试:
ETag: "040419095614"
【讨论】:
感谢您的回复。但是即使在 ETag 的两边都添加了双引号,浏览器也不会发送 If-None-Match 标头。以上是关于浏览器未发送 If-None-Match 标头的主要内容,如果未能解决你的问题,请参考以下文章
Chrome 会忽略 ETag 标头,只使用内存缓存/磁盘缓存
Safari 不发送“If-Modified-Since”和“If-None-Match”标头