网站制作:网站制作中缓存设计的原理- 你需要知道的一切

在前面的一篇文章中,我讨论了http和它在这一点上的立场。这是一个将专门关于缓存。
作为用户,我们很容易因为缓冲视频,加载几秒钟的图片,由于内容正在加载而卡住的网页而感到沮丧。从一些缓存加载资源比从源服务器获取资源要快得多。它减少延迟,加速资源加载,减少服务器上的负载,降低带宽成本等。
介绍什么是web缓存?它是位于客户端和服务器之间的某处,持续查看请求及其响应,查找可以缓存的任何响应。以便在再次进行相同请求时消耗更少的时间。
注意,这个图像只是给你一个想法。根据缓存的类型,实现缓存的位置可能会有所不同。更多这一点。
在我们进一步详细介绍之前,让我在文章中进一步介绍将要使用的术语
客户端可以是您的浏览器或任何请求服务器获取某些资源的应用程序原始服务器,真相的源,容纳客户端所需的所有内容,并负责满足客户端请求。stale content是缓存的但已过期的内容新鲜内容是缓存中可用的尚未过期的内容缓存验证是联系服务器以检查缓存内容的有效性并获得更新的过程,当它将要到期时缓存无效化是删除缓存中可用的任何过时内容的过程
缓存位置web缓存可以是共享的或私有的,具体取决于它存在的位置。下面是缓存位置的列表
浏览器缓存您可能已经注意到,当您单击浏览器中的后退按钮时,加载页面所需的时间比第一次加载时所需的时间少; 这是浏览器缓存中播放。浏览器缓存是缓存的最常见位置,浏览器通常为它保留一些空间。
浏览器缓存仅限于一个用户,与其他缓存不同,它可以存储“私有”响应。稍后再谈。
代理缓存与为单个用户提供服务的浏览器缓存不同,代理缓存可以为访问相同内容的数百个不同用户提供服务。它们通常由isp或任何其他独立实体在更广泛的层面上实施。
反向代理缓存反向代理缓存或代理缓存在源服务器附近实现,以减少服务器上的负载。不同于由isp等实现的代理缓存以减少网络中的带宽使用,代理或反向代理缓存由服务器管理员在源服务器附近实现以减少服务器上的负载。
虽然可以控制反向代理缓存(因为它是由您在服务器上实现的),您不能避免或控制浏览器和代理缓存。如果您的网站未配置为正确使用这些缓存,它仍将使用在这些缓存上设置的默认值进行缓存。
缓存标头那么,我们如何控制web缓存?每当服务器发出一些响应,它伴随着一些http头,以指导缓存是否以及如何缓存此响应。内容提供者必须确保返回正确的http头,以强制缓存如何缓存内容。
到期在http / 1.1和介绍之前cache-control,有一个expires标题,它只是一个时间戳告诉缓存一些内容被认为是新鲜的时间。此标题的可能值是绝对到期日期; 其中日期必须为gmt。下面是示例头
expires: mon, 13 mar 2017 12:22:00 gmt
应该注意的是,日期不能超过一年,如果日期格式错误,内容将被视为陈旧。此外,缓存上的时钟必须与服务器上的时钟同步,否则可能无法实现所需的结果。
虽然,expires头仍然有效并且被缓存广泛支持,应该优先考虑它的http / 1.1后继cache-control。
pragma另一个从老,前http / 1.1天,是pragma。现在可以使用下面给出的缓存控制头来做一切。但是,我想指出的一点是,你可能会pragma: no-cache在这里和那里使用,希望阻止缓存的响应。它可能不一定工作; 因为http规范在请求头中讨论它,并且在响应头中没有提及它。而cache-control头应该用于控制缓存。
高速缓存控制高速缓存控制指定内容被高速缓存的时间和方式。这个头文件系列是在http / 1.1中引入的,以克服expires头文件的限制。
cache-control头的值是复合的,即它可以有多个指令/值。让我们看看这个头可能包含的值。
私人的设置缓存private意味着内容不会被缓存在任何代理中,它只会被客户端(即浏览器)缓存,
cache-control: private
话虽如此,不要让它欺骗你,认为设置此标题将使您的数据安全; 您仍然必须使用ssl来实现此目的。
上市如果设置为public,除了被客户端缓存,它也可以由代理高速缓存; 服务于许多其他用户
cache-control: public
无存储no-store 指定内容不被任何高速缓存高速缓存
cache-control: no-store
无缓存no-cache表示可以维护缓存,但是缓存的内容将etag在被服务之前从服务器被重新验证(例如使用)。也就是说,仍然存在对服务器的请求,但是用于验证并且不下载缓存的内容。
cache-control: max-age=3600, no-cache, public
max-age:secondsmax-age指定内容将被缓存的秒数。例如,如果cache-control看起来像下面:
cache-control: max-age=3600, public
这将意味着内容是公开可缓存的,并且在60秒后将被认为是陈旧的
s-maxage:秒s-maxage这里的s-前缀代表共享。这个指令专门针对共享缓存。像max-age它也得到的东西被缓存的秒数。如果存在,它将覆盖max-age和expires头的共享缓存。
cache-control: s-maxage=3600, public
必须重新验证must-revalidate有时可能会发生,如果您有网络问题,并且无法从服务器检索内容,浏览器可能无法验证服务陈旧的内容。must-revalidate避免这种情况。如果存在此伪指令,则意味着在任何情况下都不能提供过时的内容,并且在服务之前必须从服务器重新验证数据。
cache-control: max-age=3600, public, must-revalidate
代理重新验证proxy-revalidate类似,must-revalidate但它为共享或代理缓存指定相同。换句话说proxy-revalidate就是must-revalidate为s-maxage是max-age。但为什么他们不叫它s-revalidate?我不知道为什么,如果你有任何线索请在下面留下评论。
混合值但是,您可以结合不同的方式这些指令来实现不同的缓存行为,no-cache/no-store并且public/private是互斥的。
如果同时指定no-store和no-cache,no-store将优先于no-cache。
; if specified both cache-control: no-store, no-cache ; below will be considered cache-control: no-store
对于private/public任何未认证的请求,考虑缓存,public并且对于任何已认证的缓存,考虑缓存private。
验证器到目前为止,我们只讨论了内容如何缓存以及缓存内容被视为新鲜的时间,但我们没有讨论客户端如何从服务器进行验证。下面我们讨论用于这个目的的头。
etagetag或“实体标签”在http / 1.1规范中引入。etag只是服务器附加一些资源的唯一标识符。此etag稍后被客户端用于进行条件http请求,give me this resource if etag is not same as the etag that i have并且仅当etag不匹配时下载内容。
在http文档中未指定生成etag的方法,并且通常使用一些抗冲突哈希函数来为资源的每个版本分配etag。可能有两种类型的etag,即强和弱
etag: j82j8232ha7sdh0q2882 - strong etag etag: w/j82j8232ha7sdh0q2882 - weak etag (prefixed with `w/`)
强有效的etag意味着两个资源完全相同,它们之间没有差别。虽然弱etag意味着两个资源虽然不完全相同但可以被认为是相同的。例如,弱的etag可能对动态内容有用。
现在你知道什么etags是什么,但浏览器如何做这个请求?通过向服务器发出请求,同时在if-none-match头中发送可用的etag 。
考虑这种情况,你打开一个网页,加载了一个标志图像,缓存周期为60秒,etag为abc123xyz。大约30分钟后你重新加载页面,浏览器会注意到,新鲜的60秒的标志现在陈旧; 它将触发对服务器的请求,在if-none-match标题中发送陈旧的标志图像的etag
if-none-match: abc123xyz
然后服务器将该etag与当前资源版本的etag进行比较。如果两个etag匹配,服务器将发送回的响应304 not modified将告诉客户端,它有它的副本仍然是好的,它会被认为新鲜的另一个60秒。如果两个etag不匹配,即徽标可能改变,客户端将被发送新的标志,它将用来替换它所具有的陈旧的标志。
上一次更改服务器可能包含指示last-modified上次修改某些内容的日期和时间的标头。
last-modified: wed, 15 mar 2017 12:30:26 gmt
当内容变得陈旧时,客户端将做出一个条件请
上一个:建设企业网站方法是什么?
下一个:暂无
靖边网站建设,靖边做网站,靖边网站设计