gpt4 book ai didi

caching - 强制(或高度鼓励)浏览器直接从缓存中加载网络字体

转载 作者:行者123 更新时间:2023-12-02 01:55:15 26 4
gpt4 key购买 nike

我正在尝试让我的网站加载一些网络字体,我想配置响应 header 以告诉浏览器缓存字体,将其保留在那里,然后直接从缓存中获取文件而不是发送对服务器的请求。

Google Webfonts 在这方面做得很好;即使当我在 Chrome 或 Firefox 中硬重新加载时,字体也直接从缓存加载,甚至不检查是否有可用的更新版本(它返回 200 状态,(来自缓存) 显示在 Chrome 中。

但是,当我发送带有所有常用缓存 header 的响应(我使用 nginx 作为 Web 服务器)时,它无法执行此操作。即使到了浏览器不会在常规页面重新加载时发送请求(并且服务器发送 304)的地步,这也很棒。

这是从缓存中提供的 Google header (来自他们的一个 WOFF 文件):

HTTP/1.1 200 OK
status: 200 OK
version: HTTP/1.1
access-control-allow-origin: *
age: 13190
alternate-protocol: 80:quic
cache-control: public, max-age=31536000
content-length: 28588
content-type: font/woff
date: Fri, 13 Dec 2013 23:51:45 GMT
expires: Sat, 13 Dec 2014 23:51:45 GMT
last-modified: Thu, 13 Sep 2012 17:47:52 GMT
server: sffe
timing-allow-origin: *
x-content-type-options: nosniff
x-xss-protection: 1; mode=block

这是我的服务器发送的响应之一(“实时”提供):

HTTP/1.1 200 OK
Server: nginx
Date: Sat, 14 Dec 2013 03:40:37 GMT
Content-Type: font/opentype
Content-Length: 244744
Last-Modified: Mon, 09 Dec 2013 22:35:59 GMT
Connection: keep-alive
Expires: Sun, 14 Dec 2014 03:40:37 GMT
Cache-Control: max-age=31536000
Access-Control-Allow-Origin: *
Cache-Control: public, max-age=315360000
Accept-Ranges: bytes

(我意识到有 2 个 Cache-Control header ,但根据规范,应该没问题?第一个​​是 nginx 的,第二个是我手动添加的以添加“public”)。

是什么导致了两种响应之间的巨大行为差异?

最佳答案

我对这些东西并不过分时髦,但在配置网络服务器方面确实有一点经验。我决定快速查看您的问题,并在 nginx 网站上找到了可能有用的信息。

http://nginx.org/ru/docs/http/ngx_http_headers_module.html

但是,我看到的主要内容是 nginx 响应没有发送“Age” header 。

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

这是 w3c 的主要摘录:

14.6 Age

  The Age response-header field conveys the sender's estimate of the
amount of time since the response (or its revalidation) was
generated at the origin server. A cached response is "fresh" if
its age does not exceed its freshness lifetime. Age values are
calculated as specified in section 13.2.3.

Age = "Age" ":" age-value
age-value = delta-seconds

Age values are non-negative decimal integers, representing time in
seconds.

If a cache receives a value larger than the largest positive
integer it can represent, or if any of its age calculations
overflows, it MUST transmit an Age header with a value of
2147483648 (2^31). An HTTP/1.1 server that includes a cache MUST
include an Age header field in every response generated from its
own cache. Caches SHOULD use an arithmetic type of at least 31
bits of range.

发送“年龄” header 可能会解决您的问题。祝你好运!

关于caching - 强制(或高度鼓励)浏览器直接从缓存中加载网络字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20579435/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com