有和没有 "latest" 的 JSDelivr URL 的区别
Difference in JSDelivr URL with & without "latest"
我去 GitHub issues 提出支持票,但想先问这个问题以避免噪音。
这就是 docs 所说的-
Omit the version completely or use "latest" to load the latest one (not recommended for production usage):
/npm/jquery@latest/dist/jquery.min.js
/npm/jquery/dist/jquery.min.js
根据文档,我们可以 latest
或完全省略它以加载最新版本。但我看到了不同-
加上 latest
(URL 1 - U1)
示例- https://cdn.jsdelivr.net/npm/@letscooee/web-sdk@latest/dist/sdk.min.js
它加载缓存 24 小时的最后发布版本。这意味着如果我们在 24 小时内发布 v2 和 v3,上面的 URL 仍然会显示 v1.
缓存周期为1周。
没有 latest
(URL 2 - U2)
示例- https://cdn.jsdelivr.net/npm/@letscooee/web-sdk/dist/sdk.min.js
虽然我们完全省略了 latest
,但这会立即加载最新版本,即 v3,缓存期也是 1 周。
我已根据他们的文档请求清除 API,但我认为此行为不符合他们的文档。
试图 Google 原因并阅读了他们的文档 3 遍。我错过了什么吗?
编辑 1
看完马丁的回答后,我做了以下事情-
(要查看图像,请在新选项卡中打开它们并删除 .png
之前的 t
)
Step Taken
@ Time
U1
U2
Purge Cache
12:39:00 UTC
Purged
Purged
See Age
Header
@ 12:40 UTC
0
0
See Date
Header
@ 12:40 UTC
Sun, 12 Sep 2021 12:40:25 GMT
Sun, 12 Sep 2021 12:40:31 GMT
Headers
12:41:00 UTC
Result
12:41:00 UTC
Points to latest release 0.0.3
Points to latest release 0.0.3
Publish new NPM release 0.0.4
12:48:00 UTC
Refresh both the URLs
12:49:00 UTC
Shows old release 0.0.3
Shows latest release 0.0.4
最后一步说明我这里错了。根据文档
,这按预期工作(即仅显示 0.0.3)
在我看来,这两个链接都指向同一个 sdk URL。
根据 cdns 的工作方式,例如提及 sdk 的版本:
<script src="https://unpkg.com/three@0.126.0/examples/js/loaders/GLTFLoader.js"></script>
或按照以下方式始终指向最新版本的 sdk:
<script src="https://cdn.rawgit.com/mrdoob/three.js/master/examples/js/loaders/GLTFLoader.js"></script>
两种情况下的缓存时间相同 - CDN 级别为 12 小时,浏览器级别为 7 天:cache-control: public, max-age=604800, s-maxage=43200
这并不一定意味着 URL 将始终 return 相同的内容,因为 CDN 和您的浏览器都会根据时间独立计算每个 URL 的过期时间它是第一个检索到的,因此 CDN 可能会在发布后最多 12 小时内提供不同的版本。
我去 GitHub issues 提出支持票,但想先问这个问题以避免噪音。
这就是 docs 所说的-
Omit the version completely or use "latest" to load the latest one (not recommended for production usage):
/npm/jquery@latest/dist/jquery.min.js /npm/jquery/dist/jquery.min.js
根据文档,我们可以 latest
或完全省略它以加载最新版本。但我看到了不同-
加上 latest
(URL 1 - U1)
示例- https://cdn.jsdelivr.net/npm/@letscooee/web-sdk@latest/dist/sdk.min.js
它加载缓存 24 小时的最后发布版本。这意味着如果我们在 24 小时内发布 v2 和 v3,上面的 URL 仍然会显示 v1.
缓存周期为1周。
没有 latest
(URL 2 - U2)
示例- https://cdn.jsdelivr.net/npm/@letscooee/web-sdk/dist/sdk.min.js
虽然我们完全省略了 latest
,但这会立即加载最新版本,即 v3,缓存期也是 1 周。
我已根据他们的文档请求清除 API,但我认为此行为不符合他们的文档。
试图 Google 原因并阅读了他们的文档 3 遍。我错过了什么吗?
编辑 1
看完马丁的回答后,我做了以下事情-
(要查看图像,请在新选项卡中打开它们并删除 .png
之前的 t
)
Step Taken | @ Time | U1 | U2 |
---|---|---|---|
Purge Cache | 12:39:00 UTC | Purged | Purged |
See Age Header |
@ 12:40 UTC | 0 | 0 |
See Date Header |
@ 12:40 UTC | Sun, 12 Sep 2021 12:40:25 GMT |
Sun, 12 Sep 2021 12:40:31 GMT |
Headers | 12:41:00 UTC | ||
Result | 12:41:00 UTC | Points to latest release 0.0.3 | Points to latest release 0.0.3 |
Publish new NPM release 0.0.4 | 12:48:00 UTC | ||
Refresh both the URLs | 12:49:00 UTC | Shows old release 0.0.3 |
最后一步说明我这里错了。根据文档
,这按预期工作(即仅显示 0.0.3)在我看来,这两个链接都指向同一个 sdk URL。 根据 cdns 的工作方式,例如提及 sdk 的版本:
<script src="https://unpkg.com/three@0.126.0/examples/js/loaders/GLTFLoader.js"></script>
或按照以下方式始终指向最新版本的 sdk:
<script src="https://cdn.rawgit.com/mrdoob/three.js/master/examples/js/loaders/GLTFLoader.js"></script>
两种情况下的缓存时间相同 - CDN 级别为 12 小时,浏览器级别为 7 天:cache-control: public, max-age=604800, s-maxage=43200
这并不一定意味着 URL 将始终 return 相同的内容,因为 CDN 和您的浏览器都会根据时间独立计算每个 URL 的过期时间它是第一个检索到的,因此 CDN 可能会在发布后最多 12 小时内提供不同的版本。