用-cURL-请求测试-ETag-浏览器缓存
作者:Nic Raboy翻译:疯狂的技术宅原文:https://www.thepolyglotdevelo...未经允许严禁转载最近,我一直在玩Netlify,结果我对内容交付网络(CDN)常见的缓存策略越来越熟悉。有一种将 ETag标识符用于 Web 资源的策略。 简而言之,ETag 标识符是一个值,通常是一个散列,代表特定 Web 资源的版本。该资源与 ETag 值一起缓存在浏览器中,并且服务器会在确定特定的缓存资源是否已更改时使用该值。 我们将探索怎样通过简单的 cURL 请求用 ETag 标识符模拟浏览器发出的请求,而是。 首先,我们将请求资源: $ curl -I https://www.thepolyglotdeveloper.com/css/custom.min.cssHTTP/2 200 accept-ranges: bytescache-control: public, max-age=0, must-revalidatecontent-length: 7328content-type: text/css; charset=UTF-8date: Wed, 04 Sep 2019 00:41:04 GMTstrict-transport-security: max-age=31536000etag: "018b8b0ecb632aab770af328f043b119-ssl"age: 0server: Netlifyx-nf-request-id: 65a8e1aa-03a0-4b6c-9f46-51aba795ad83-921013在上述请求中,我仅从响应中请求了标头信息。对于本文,响应体回复的内容对我们而言并不重要。 注意 cache-control 和 etag 标头以及响应代码。 在 Netlify 下,cache-control 标头告诉浏览器缓存资源,但也不信任缓存。这样做是为了使客户端始终尝试获取最新资源。 etag 标头代表资源的版本,并随将来的请求一起发送。如果服务器回复说两次请求之间的 etag 没有改变,则响应将会带有 304 代码,从而将使用缓存的资源。 因此,让我们用 cURL 检查一下资源是否已进行了更改: $ curl -I -H 'If-None-Match: "018b8b0ecb632aab770af328f043b119-ssl"' https://www.thepolyglotdeveloper.com/css/custom.min.cssHTTP/2 304 date: Wed, 04 Sep 2019 00:53:24 GMTetag: "018b8b0ecb632aab770af328f043b119-ssl"cache-control: public, max-age=0, must-revalidateserver: Netlifyx-nf-request-id: eca29310-c9bf-4742-87e1-3412e8852381-2165939对相同资源的新请求,将包含 If-None-Match 标头,其值为前一个请求的 etag 哈希。 ...