首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

即使使用Etag、max-age: 0、必须重新验证和无缓存,更改后的静态文件的URL仍返回304

304状态码表示资源未修改,服务器通知客户端使用缓存副本。当客户端请求一个静态文件时,服务器会检查该文件的Etag值和max-age设置,以确定是否需要重新验证和返回新的文件。

Etag是一个用于标识文件版本的字符串,服务器通过比较客户端请求中的Etag和服务器上文件的Etag来判断文件是否发生了变化。如果Etag匹配,服务器会返回304状态码,告诉客户端使用缓存的文件。

max-age是一个用于设置缓存过期时间的指令,服务器会在响应头中返回该指令,告诉客户端在指定时间内可以使用缓存的文件。当max-age设置为0时,表示文件立即过期,客户端必须重新验证文件的有效性。

无缓存指令是一种强制客户端不使用缓存的方式,服务器会在响应头中返回Cache-Control: no-cache指令,告诉客户端每次请求都必须重新获取文件。

尽管使用了Etag、max-age: 0和无缓存指令,但更改后的静态文件的URL仍然返回304状态码的原因可能是以下几点:

  1. 客户端请求中的Etag与服务器上文件的Etag不匹配,导致服务器认为文件未发生变化,返回304状态码。解决方法是确保Etag值正确匹配。
  2. max-age设置不正确,导致文件在指定时间内仍然被认为是有效的,客户端使用缓存文件,服务器返回304状态码。解决方法是正确设置max-age为0,确保文件立即过期。
  3. 无缓存指令未生效,客户端仍然使用缓存文件,服务器返回304状态码。解决方法是检查是否正确设置了Cache-Control: no-cache指令。

综上所述,要确保更改后的静态文件的URL返回200状态码而不是304,可以通过以下步骤进行处理:

  1. 确保Etag值正确匹配,可以使用文件的哈希值作为Etag,确保每次文件更改都会生成新的Etag。
  2. 设置max-age为0,确保文件立即过期,客户端必须重新验证文件的有效性。
  3. 设置Cache-Control: no-cache指令,强制客户端不使用缓存。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云CDN加速:https://cloud.tencent.com/product/cdn
  • 腾讯云内容分发网络(CDN):https://cloud.tencent.com/product/cdn
  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云原生容器服务(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云云数据库MySQL版:https://cloud.tencent.com/product/cdb_mysql
  • 腾讯云云数据库MongoDB版:https://cloud.tencent.com/product/cdb_mongodb
  • 腾讯云云数据库Redis版:https://cloud.tencent.com/product/cdb_redis
  • 腾讯云云数据库SQL Server版:https://cloud.tencent.com/product/cdb_sqlserver
  • 腾讯云云数据库PostgreSQL版:https://cloud.tencent.com/product/cdb_postgresql
  • 腾讯云云数据库MariaDB版:https://cloud.tencent.com/product/cdb_mariadb
  • 腾讯云云数据库DCDB版:https://cloud.tencent.com/product/cdb_dcdb
  • 腾讯云云数据库TDSQL版:https://cloud.tencent.com/product/cdb_tdsql
  • 腾讯云云数据库Memcached版:https://cloud.tencent.com/product/cdb_memcached
  • 腾讯云云数据库ClickHouse版:https://cloud.tencent.com/product/cdb_clickhouse
  • 腾讯云云数据库OceanBase版:https://cloud.tencent.com/product/cdb_oceanbase
  • 腾讯云云数据库MariaDB TX版:https://cloud.tencent.com/product/cdb_mariadbtx
  • 腾讯云云数据库PolarDB版:https://cloud.tencent.com/product/cdb_polardb
  • 腾讯云云数据库Oracle版:https://cloud.tencent.com/product/cdb_oracle
  • 腾讯云云数据库Greenplum版:https://cloud.tencent.com/product/cdb_greenplum
  • 腾讯云云数据库HBase版:https://cloud.tencent.com/product/cdb_hbase
  • 腾讯云云数据库Cassandra版:https://cloud.tencent.com/product/cdb_cassandra
  • 腾讯云云数据库InfluxDB版:https://cloud.tencent.com/product/cdb_influxdb
  • 腾讯云云数据库Elasticsearch版:https://cloud.tencent.com/product/cdb_elasticsearch
  • 腾讯云云数据库Neo4j版:https://cloud.tencent.com/product/cdb_neo4j
  • 腾讯云云数据库TcaplusDB版:https://cloud.tencent.com/product/cdb_tcaplusdb
  • 腾讯云云数据库TcaplusDB for Redis版:https://cloud.tencent.com/product/cdb_tcaplusdb_redis
  • 腾讯云云数据库TcaplusDB for MongoDB版:https://cloud.tencent.com/product/cdb_tcaplusdb_mongodb
  • 腾讯云云数据库TcaplusDB for MySQL版:https://cloud.tencent.com/product/cdb_tcaplusdb_mysql
  • 腾讯云云数据库TcaplusDB for PostgreSQL版:https://cloud.tencent.com/product/cdb_tcaplusdb_postgresql
  • 腾讯云云数据库TcaplusDB for MariaDB版:https://cloud.tencent.com/product/cdb_tcaplusdb_mariadb
  • 腾讯云云数据库TcaplusDB for SQL Server版:https://cloud.tencent.com/product/cdb_tcaplusdb_sqlserver
  • 腾讯云云数据库TcaplusDB for ClickHouse版:https://cloud.tencent.com/product/cdb_tcaplusdb_clickhouse
  • 腾讯云云数据库TcaplusDB for Oracle版:https://cloud.tencent.com/product/cdb_tcaplusdb_oracle
  • 腾讯云云数据库TcaplusDB for Greenplum版:https://cloud.tencent.com/product/cdb_tcaplusdb_greenplum
  • 腾讯云云数据库TcaplusDB for HBase版:https://cloud.tencent.com/product/cdb_tcaplusdb_hbase
  • 腾讯云云数据库TcaplusDB for Cassandra版:https://cloud.tencent.com/product/cdb_tcaplusdb_cassandra
  • 腾讯云云数据库TcaplusDB for InfluxDB版:https://cloud.tencent.com/product/cdb_tcaplusdb_influxdb
  • 腾讯云云数据库TcaplusDB for Elasticsearch版:https://cloud.tencent.com/product/cdb_tcaplusdb_elasticsearch
  • 腾讯云云数据库TcaplusDB for Neo4j版:https://cloud.tencent.com/product/cdb_tcaplusdb_neo4j
  • 腾讯云云数据库TcaplusDB for TcaplusDB版:https://cloud.tencent.com/product/cdb_tcaplusdb_tcaplusdb
  • 腾讯云云数据库TcaplusDB for TcaplusDB for Redis版:https://cloud.tencent.com/product/cdb_tcaplusdb_tcaplusdb_redis
  • 腾讯云云数据库TcaplusDB for TcaplusDB for MongoDB版:https://cloud.tencent.com/product/cdb_tcaplusdb_tcaplusdb_mongodb
  • 腾讯云云数据库TcaplusDB for TcaplusDB for MySQL版:https://cloud.tencent.com/product/cdb_tcaplusdb_tcaplusdb_mysql
  • 腾讯云云数据库TcaplusDB for TcaplusDB for PostgreSQL版:https://cloud.tencent.com/product/cdb_tcaplusdb_tcaplusdb_postgresql
  • 腾讯云云数据库TcaplusDB for TcaplusDB for MariaDB版:https://cloud.tencent.com/product/cdb_tcaplusdb_tcaplusdb_mariadb
  • 腾讯云云数据库TcaplusDB for TcaplusDB for SQL Server版:https://cloud.tencent.com/product/cdb_tcaplusdb_tcaplusdb_sqlserver
  • 腾讯云云数据库TcaplusDB for TcaplusDB for ClickHouse版:https://cloud.tencent.com/product/cdb_tcaplusdb_tcaplusdb_clickhouse
  • 腾讯云云数据库TcaplusDB for TcaplusDB for Oracle版:https://cloud.tencent.com/product/cdb_tcaplusdb_tcaplusdb_oracle
  • 腾讯云云数据库TcaplusDB for TcaplusDB for Greenplum版:https://cloud.tencent.com/product/cdb_tcaplusdb_tcaplusdb_greenplum
  • 腾讯云云数据库TcaplusDB for TcaplusDB for HBase版:https://cloud.tencent.com/product/cdb_tcaplusdb_tcaplusdb_hbase
  • 腾讯云云数据库TcaplusDB for TcaplusDB for Cassandra版:https://cloud.tencent.com/product/cdb_tcaplusdb_tcaplusdb_cassandra
  • 腾讯云云数据库TcaplusDB for TcaplusDB for InfluxDB版:https://cloud.tencent.com/product/cdb_tcaplusdb_tcaplusdb_influxdb
  • 腾讯云云数据库TcaplusDB for TcaplusDB for Elasticsearch版:https://cloud.tencent.com/product/cdb_tcaplusdb_tcaplusdb_elasticsearch
  • 腾讯云云数据库TcaplusDB for TcaplusDB for Neo4j版:https://cloud.tencent.com/product/cdb_tcaplusdb_tcaplusdb_neo4j
  • 腾讯云云数据库TcaplusDB for TcaplusDB for TcaplusDB版:https://cloud.tencent.com/product/cdb_tcaplusdb_tcaplusdb_tcaplusdb
  • 腾讯云云数据库TcaplusDB for TcaplusDB for TcaplusDB for Redis版:https://cloud.tencent.com/product/cdb_tcaplusdb_tcaplusdb_tcaplusdb_redis
  • 腾讯云云数据库TcaplusDB for TcaplusDB for TcaplusDB for MongoDB版:https://cloud.tencent.com/product/cdb_tcaplusdb_tcaplusdb_tcaplusdb_mongodb
  • 腾讯云云数据库TcaplusDB for TcaplusDB for TcaplusDB for MySQL版:https://cloud.tencent.com/product/cdb_tcaplusdb_tcaplusdb_tcaplusdb_mysql
  • 腾讯云云数据库TcaplusDB for TcaplusDB for TcaplusDB for PostgreSQL版:https://cloud.tencent.com/product/cdb_tcaplusdb_tcaplusdb_tcaplusdb_postgresql
  • 腾讯云云数据库TcaplusDB for TcaplusDB for TcaplusDB for MariaDB版:https://cloud.tencent.com/product/cdb_tcaplusdb_tcaplusdb_tcaplusdb_mariadb
  • 腾讯云云数据库TcaplusDB for TcaplusDB for TcaplusDB for SQL Server版:https://cloud.tencent.com/product/cdb_tcaplusdb_tcaplusdb_tcaplusdb_sqlserver
  • 腾讯云云数据库TcaplusDB for TcaplusDB for TcaplusDB for ClickHouse版:https://cloud.tencent.com/product/cdb_tcaplusdb_tcaplusdb_tcaplusdb_clickhouse
  • 腾讯云云数据库TcaplusDB for TcaplusDB for TcaplusDB for Oracle版:https://cloud.tencent.com/product/cdb_tcaplusdb_tcaplusdb_tcaplusdb_oracle
  • 腾讯云云数据库TcaplusDB for TcaplusDB for TcaplusDB for Greenplum版:https://cloud.tencent.com/product/cdb_tcaplusdb_tcaplusdb_tcaplusdb_greenplum
  • 腾讯云云数据库TcaplusDB for TcaplusDB for TcaplusDB for HBase版:https://cloud.tencent.com/product/cdb_tcaplusdb_tcaplusdb_tcaplusdb_hbase
  • 腾讯云云数据库TcaplusDB for TcaplusDB for TcaplusDB for Cassandra版:https://cloud.tencent.com/product/cdb_tcaplusdb_tcaplusdb_tcaplusdb_cassandra
  • 腾讯云云数据库TcaplusDB for TcaplusDB for TcaplusDB for InfluxDB版:https://cloud.tencent.com/product/cdb_tcaplusdb_tcaplusdb_tcaplusdb_influxdb
  • 腾讯云云数据库TcaplusDB for TcaplusDB for TcaplusDB for Elasticsearch版:https://cloud.tencent.com/product/cdb_tcaplusdb_tcaplusdb_tcaplusdb_elasticsearch
  • 腾讯云云数据库TcaplusDB for TcaplusDB for TcaplusDB for Neo4j版:https://cloud.tencent.com/product/cdb_tcaplusdb_tcaplusdb_tcaplusdb_neo4j
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

浏览器缓存机制剖析

缓存过期,文件有改动,那么下载新文件,此时状态码为200 2、缓存过期,文件改动,那么服务器只会给你返回一个头信息(304),浏览器读取304,就会去读取过期缓存文件。...但它实际上机制是,仍然对资源使用缓存,但每一次在使用缓存之前必须(MUST)向服务器对缓存资源进行验证。...而no-cache则是告诉浏览器在每一次使用缓存之前,你必须(MUST)对资源进行重新验证。 区别在于:SHOULD是非强制性,而MUST是强制性。...这是一个典型劣币驱逐良币 不管是max-age=0还是no-cache,都会返回304(资源修改情况下),no-store才是真正不进行缓存。...如果服务端对两者验证结果不一致,例如通过一个条件判断资源发生了更改,而另一个判定资源没有发生更改,则不允许返回304状态。但话说回来,是否返回还是通过服务端编写实际代码决定

61170

跟我一起探索 HTTP-HTTP缓存

备注: 在评估如何使用 ETag Last-Modified 时,请考虑以下几点:在缓存重新验证期间,如果 ETag Last-Modified 都存在,则 ETag 优先。...或其他登录方式,并且内容是为每个用户个性化,那么也必须提供 private,以防止与其他用户共享: Cache-Control: no-cache, private 缓存破坏 最适合缓存资源是静态不可变文件...因此,你可以使用包含基于版本号或哈希值更改部分 URL 来提供 JavaScript CSS。一些方法如下所示。...数字“37”、“38”“41”分别代表一周、一个月一年。 因为缓存会在保存新条目时删除旧条目,所以一周存储响应仍然存在可能性并不高——即使 max-age 设置为 1 周。...对于预构建静态文件生成这些标头很容易。 这里 ETag 值可能是文件哈希值。

22551

揭秘浏览器缓存功夫之道| 技术创作特训营第一期

从规范字面意思来说,max-age 到期是 应该( SHOULD )重新验证,而 no-cache 是 必须( MUST )重新验证。但实际情况以浏览器实现为准,大部分情况他们俩行为还是一致。...如果缓存未失效,则返回 HTTP 状态码 304 表示继续使用,于是客户端继续使用缓存; 图片 如果失效,则返回数据和缓存规则,浏览器响应数据,再把规则写入到缓存数据库。...': 'max-age=5', "Etag": hash }); } // 根据完整路径 使用fs模块来进行文件内容读取 读取内容将内容返回...但是在这个示例中,如果我们修改了服务器静态资源,客户端是没办法实时更新,因为静态资源是直接返回文件,只要静态资源文件名没变,即使该资源内容已经发生了变化,服务器也会认为资源没有变化。...而为了解决更新问题,就需要在文件名(或者路径)中添加 Hash, 版本号等动态字符,之后更改动态字符,从而达到更改引用 URL 目的,让之前强制缓存失效 (其实并未立即失效,只是不再使用了而已)。

25852

通过 Node.js 小示例学习浏览器缓存策略

,但是在 max-stale 这个时间内还可以使用过期缓存,而不需要向服务器请求新内容 重新验证 must-revalidate:如果 max-age 设置内容过期,必须要向服务器请求重新获取数据验证内容是否过期...,为什么静态资源文件改变,再次发起请求还是之前内容,没有变化呢?...先回答第一个问题 在页面中引入静态资源文件,为什么静态资源文件改变,再次发起请求还是之前内容,没有变化呢?... If-None-Match Last-Modified 是以文件修改时间来判断,Etag 是根据文件内容是否修改来判断,如果 Etag 有修改重新获取新资源返回,如果未修改返回 304 通知客户端使用本地缓存...相同点:校验通过返回 304 通知客户端使用本地缓存,校验不通过重新获取最新资源,设置 Last-Modified/Etag 响应头,返回状态码 200 。 疑问? POST 可以缓存吗?

1.3K30

Nginx下关于缓存控制字段cache-control配置说明 - 运维小结

请求确认 ,该资源是否有修改, 有的话 返回200 , 的话 返回304。...- 重新验证重新加载 must-revalidate 缓存必须使用之前验证旧资源状态,并且不可使用过期资源。表示如果页面过期,则去服务器进行获取。...资源(如果未过期)在服务器上不发生改变,因此客户端不应发送重新验证请求头(例如If-None-Match或If-Modified-Since)来检查更新,即使用户显式地刷新页面。...之后,服务器才能返回304. 6、Last-ModifiedEtag 分布式系统里多台机器间文件last-modified必须保持一致,以免负载均衡到不同机器导致比对失败....Expires =max-age + “每次下载时的当前request时间” 所以一旦重新下载页面,expires就重新计算一次,但last-modified不会变化. 8、基于nginx配置使用总结

7.4K51

Web浏览器缓存机制

客户端会缓存请求过静态资源(图片,CSS 文件,JS文件等),当用户再次请求相同url时,浏览器会根据缓存规则判断是否使用已经缓 存静态资源文件,或者绕过资源缓存直接请求服务器重新获取资源。...(b)no-cache:每次发起请求都需要验证缓存资源新鲜度,新鲜度满足则返回304状态码,使用缓存资源,否则返回200状态码,返回资源主体(c)no-store:不缓存,每次请求需要从服务器重新获取资源...获取Last-Mdodied值发送到服务器请求资源修改时间比对,如果服务器资源修改过则返回资源主体200状态码到浏览器,浏览器更新缓存资源,否则说明资源修改返回304状态码 Etag/If-None-Match...(a) Etag是请求服务器资源唯一标识,资源改动则标识更改,从而验证资源是否更新。...缓存生效,返回304状态码 缓存失效,返回200状态码资源结果,浏览器加载资源并且更新本地缓存 协商缓存相关首部:Last-Modified / If-Modified-SinceEtag /

1.4K30

浅谈浏览器HTTP缓存机制

如果服务器发现ETag匹配不上,那么直接以常规GET 200回包形式将新资源(当然也包括了新ETag)发给客户端;如果ETag是一致,则直接返回304知会客户端直接使用本地缓存即可。...如果 Last-Modified ETag 同时被使用,则要求它们验证必须通过才会返回304,若其中某个验证没通过,则服务器会按常规返回资源实体及200状态码。...上图前三条请求是原始请求,接着三条请求是刷新页面新请求,在发新请求之前我们修改了 reset.css 文件,所以它 Last-Modified ETag 均发生了改变,服务器因此返回了新文件给客户端...而 dog.jpg 我们没有做修改,其Last-Modified ETag在服务端是保持不变,故服务器直接返回304状态码让客户端直接使用缓存 dog.jpg 即可,没有把实体内容返回给客户端...每次你刷新页面,浏览器都会重新发出这条url请求,你会发现其 Date 值是不断变化,这说明该链接没有命中缓存,都是从原服务器返回过来数据。

69820

如何让浏览器不缓存文件

需要使用缓存协商,先与服务器确认返回响应是否被更改,如果之前响应中存在ETag,那么请求时候会与服务端验证,如果资源未被更改,则可以避免重新下载。...服务器收到If-Modify-Since,根据资源最后修改时间判断是否命中缓存。 如果命中缓存,则返回304,并且不会返回资源内容,并且不会返回Last-Modify。...与Last-Modified不一样是,当服务器返回304 Not Modified 响应时,由于ETag重新生成过,response header 中还会把这个 ETag返回即使这个ETag跟之前没有变化...Cache-Control:public, max-age=31536000 「需要重新验证」 指定no-cache或max-age=0, must-revalidate表示客户端可以缓存资源,每次使用缓存资源前都必须重新验证其有效性...浏览器发现文件名有更改,会重新获取静态资源,达到了不缓存文件目的。 使用HTML禁用缓存 HTML也可以禁用缓存, 即在页面的head标签中加入meta标签。

2.5K30

设计一个完美的HTTP缓存策略

服务器收到请求发现有头If-None-Match 则与被请求资源唯一标识进行比对, 不同,说明资源又被改动过,则响应整片资源内容,返回状态码200; 相同,说明资源新修改,则响应HTTP 304,...no-cache must-revalidate意义为必须进行验证,但是它一般是max-age一起使用,不会单独使用, Cache-Control: must-revalidate, max-age...如果服务端对两者验证结果不一致,例如通过一个条件判断资源发生了更改,而另一个判定资源没有发生更改,则不允许返回304状态。但话说回来,是否返回还是通过服务端编写实际代码决定。...5.4、max-age=0 VS. no-cache max-age=0是在告诉浏览器,资源已经过期了,你应该(SHOULD)对资源进行重新验证了;而no-cache则是告诉浏览器在每一次使用缓存之前,...你必须(MUST)对资源进行重新验证

53531

从前端角度理解缓存

失效 no-cache: 需要使用对比缓存验证缓存数据 no-store: 所有内容都不会缓存,强制缓存,对比缓存都不会触发 last-modified: 内容上次被修改时间 Etag: 文件特殊标识...ETag ETag是对资源特殊标识 Etag: W/"e563df87b65299122770e0a84ada084f" 请求该资源成功之后,将返回ETag存入if-none-match字段中(浏览器自动记录了该字段信息...),同样在请求资源时传递给服务器,服务器查询该编码对应资源有无更新,更新返回304状态,更新返回200并重新请求。...当接口状态返回304时,资源默认存储在memory cache中,当页面关闭重新打开需要再次请求。...当您访问chrome中URL时,页面上HTML其他资产(如图像)将本地存储在内存磁盘缓存中。

57810

浅谈浏览器缓存

并且在一个会话中已经检查过新鲜度 校验值(验证机制):服务器返回资源时候有时在控制头信息带上这个资源实体标签Etag(Entity Tag),它可以用来作为浏览器再次请求过程校验标识。...如果没有修改,则返回码为304使用缓存;如果修改过,则再次去服务器请求资源,返回首次请求相同为200,资源为服务器最新资源。...Last-Modified与ETag是可以一起使用,服务器会优先验证ETag,一致情况下,才会继续比对Last-Modified,最后才决定是否返回304。...一般情况下,两者会配合一起使用,因为即使服务器设置缓存时间, 当用户点击“刷新”按钮时,浏览器会忽略缓存继续向服务器发送请求,这时Last-Modified/ETag将能够很好利用304,从而减少响应开销...304还是200; 而当用户使用Ctrl+F5进行强制刷新时候,只是所有的缓存机制都将失效,重新从服务器拉去资源。

1.5K70

浏览器缓存

但协商缓存本地缓存会被忽略,会去请求服务器验证资源是否更新,如果没更新才继续使用本地缓存,此时返回304,这就是协商缓存。协商缓存主要包括 Last-Modified Etag。...,返回资源 Last-Modified = If-Modified-Since:是最新,无需再从服务端响应,此时返回304,直接使用缓存。...启用 etag 之后,请求资源响应返回会增加一个 etag 字段,如下:Etag: “FllOiaIvA1f-ftHGziLgMIMVkVw_”,具体同上 指令 参数 请求报文中作用 响应报文中作用...no-cache 客户端提醒缓存服务器,在使用缓存前,不管缓存资源是否过期了,都必须进行校验 客户端提醒缓存服务器,在使用缓存前,不管缓存资源是否过期了,都必须进行校验 max-age=[秒] 秒...秒]) 提示缓存服务器,即使资源过期也接收;或者过期指定时间内,客户端也会接收 min-fresh=[秒] 提示缓存服务器,如果资源在指定时间内还没过期,则返回 only-if-cached

75030

前端网络高级篇(三)浏览器缓存

-还需等等 Application Cache 通过manifest配置文件在本地有选择性存储JS/CSS/图片等静态资源存储大小:5M静态资源必须HTML文件同源逐渐被Service Worker...比如,单页面项目中,每次发布JSCSS文件都可能发生变化(通过在文件名上加hash来指定变化),那么,必须保证每次请求到HTML文件必须是最新。...为了便于服务器解析网站地址唯一性,我们又不能在HTML文件上应用hash指纹。在这种场景下,就只能使用协商缓存了。 2....与Last-Modified不一样是,当服务器返回304 Not Modified响应时,由于ETag重新生成过,response header中还会把这个ETag返回即使这个ETag跟之前没有变化...no-cache(协商缓存):如果服务器在响应中设置了no-cache,即Cache-Control:no-cache,那么浏览器在使用缓存资源之前,必须先与服务器确认返回响应是否被更改,如果资源未被更改

84510

HTTP 缓存技术

ETag:浏览器缓存过期时候,通过Etag令牌检查文件是否出现改变。Etag 是特殊算法计算唯一哈希值。Last-Modified:Etag用途相同,但是它是基于时间策略检查是否更改。...no-cache:浏览器在每次使用缓存之前都必须使用服务器重新验证。注意这个字段并不是禁用缓存真正含义,这里暂时卖个关子,下文继续解释。...两者区别是max-age=0通常是告诉浏览器建议刷新缓存max-age=0是非强制性(Should) ,no-cache要求强制和服务器进行验证才允许使用缓存,所以no-cache 具有强制(MUST...服务器对比Etag进行校验,比较是否本地一致。3. 如果一致返回304,浏览器可以继续使用资源。4. 如果不一致就需要重新返回请求结果,再次进行缓存。...If-None-MatchETag内容是否一致即可,内容一致则返回304并且依然使用,不一致则返回请求结果,并且重新缓存

75100

iOSweb缓存相关

如果打开缓存策略,则请求头带了If-None-Match(对应直接ETag: "5e58f3dd-b0b"),此时回包体积明显变小,同时返回码是304; ?...当请求或者response带有no-cache、max-age=0时,缓存资源仍可使用,但是会通过请求进行验证,类似上面的ETag返回304表示Not Modified,可以继续使用;(no-cache...(前提是客户端requestheader,没有设置no-cachemax-age=0) 一个资源请求流程: ?...图源网络,侵删 关于requestresponse总结: requestheader是资源请求核心控制参数,如果requestcache策略是no-cache或者max-age=0,则一定会验证资源...阻断了浏览器发起网络请求,如果本地有匹配数据,则使用本地数据返回,如果没有使用网络请求,最终所有的数据都会加载到cache; web缓存SDK上面的缓存策略并没有关系,上面的缓存策略决定是否要发起网络请求去验证资源

1K30

从前端角度理解缓存缓存是怎么回事缓存类型缓存存储在哪薄荷应用CDN缓存如何合理应用缓存

失效 no-cache: 需要使用对比缓存验证缓存数据 no-store: 所有内容都不会缓存,强制缓存,对比缓存都不会触发 last-modified: 内容上次被修改时间 Etag: 文件特殊标识...ETag ETag是对资源特殊标识 Etag: W/"e563df87b65299122770e0a84ada084f" 请求该资源成功之后,将返回ETag存入if-none-match字段中(浏览器自动记录了该字段信息...),同样在请求资源时传递给服务器,服务器查询该编码对应资源有无更新,更新返回304状态,更新返回200并重新请求。...当接口状态返回304时,资源默认存储在memory cache中,当页面关闭重新打开需要再次请求。...当您访问chrome中URL时,页面上HTML其他资产(如图像)将本地存储在内存磁盘缓存中。

1.1K20

HTTP缓存机制Etag、Last-Modified、If-None-MatchIf-Modified-Since、ExpiresCache-Control笔记

如果不相同,就将If-None-Match值设为true,返回状态码为200,客户端重新解析服务器返回数据。 问题来了,EtagLast-Modified有什么区别?...有时开发人员会在修复某些内容将所有文件上传到服务器,即使内容仅在子集上更改,也会重置所有文件Last-Modified日期。为了适应这种情况,大多数服务器也会发送一个ETag。...,此时Etag作用体现出来,根据资源计算哈希值不变,说明资源无变化,返回响应报文响应体为空,状态码304,客户端仍然使用缓存。...因此,发送缓存值指示浏览器或代理仅仅基于缓存内容“新鲜度标准”不使用缓存内容。防止旧内容在未经验证情况下向用户显示另一种常见方法是Cache-Control:max-age = 0。...这会指示用户代理内容是陈旧,并且应在使用前进行验证。所以no-cachemax-age=0是相同效果。Cache-Control:no-cache 也适用于客户端发出请求。

1.3K20

HTTP缓存

ETag 值做对比,如果两个值不相同,就返回资源内容 Etag 值,响应码为200;如果值相同,说明资源还没更新,就返回 304 状态码。...no-cache no-store 这两个指令就是“通用”指令。 no-cache 中如果包含 no-cache 指令,表示客户端可以缓存资源,每次使用缓存资源前都必须重新验证其有效性。...设置 max-age=0 功能与之类似。以客户端角度看,no-cache 表示强制向源服务器再次验证有效期,以服务端角度看,no-cache 表示资源可以缓存,但在每次使用前都要由服务端确认一下。...must-revalidate 这个指令通常与 max-age 一起使用,当设定 max-age 到期,客户端会向服务端发起网络请求,验证缓存资源是否还有效。它像是延迟版 no-cache。...,验证通过(即没有过期)就更新资源副本新鲜度,再返回这个资源副本(此时响应码为 304 Not Modified); 如果服务端验证不通过,就从服务器返回资源,再将最新资源副本放入缓存中;

79940

浏览器缓存机制剖析

max-age 与 max-stale min-fresh 同时使用时,它们设置相互之间独立生效,最为保守缓存策略总是有效。...设置,至少要留有3天新鲜期,缓存资源将在4月9日失效(12-3=9); 由于客户端总是采用最保守缓存策略,因此,4月9日,对于该资源请求将重新向服务器发起验证。...服务器收到请求,拿If-None-Match字段值与资源ETag值进行比较,若相同,则命中协商缓存返回304响应。...Vary 对于服务器而言,资源文件可能不止一个版本,比如说压缩未压缩,针对不同客户端,通常需要返回不同资源版本。...如此一来,同一个url,就能针对PCMobile返回不同缓存内容。

1.3K60

HTTP 缓存机制

过期内容:超过设置有效时间,被标记为“陈旧”内容。通常过期内容不能用于回复客户端请求,必须重新向源服务器请求新内容或者验证缓存内容是否仍然准备。...) 缓存内容将在 xxx 秒失效,失效前可以直接使用本地缓存,失效必须向服务器确认资源是否已经改变。...缓存过期取值 存储策略里面 no-cache 等同于 max-age=0 ,假如服务端返回响应中没有指明 max-age 、 no-cache 或 Expires 时,客户端是否会缓存 http response...如果返回 304 Not Modified,代表资源没有发生改变可以使用缓存数据,获取新过期时间。反之返回 200 就相当于重新请求了一遍资源并替换旧资源。...服务器端收到带 If-Modified-Since 请求后会去资源最后修改时间对比。若修改过就返回最新资源,状态码 200 ,若没有修改过则返回 304

71320
领券