返回首页
当前位置: 主页 > 编程语言 > HTML教程 >

HTTP中的缓存

时间:2015-04-07 17:30来源:电脑教程学习网 www.etwiki.cn 编辑:admin

HTTP典型应用于能通过采用缓存技术而提高性能的分布式信息系统。HTTP/1.1协议包括的许多使缓存尽可能的工作的元素。因为这些元素与协议的其他方面有着千丝万缕的联系,而且他们相互作用、影响,因此有必要单独的来介绍基本的缓存设计。

如果缓存不能改善性能,他将一无用处。HTTP/1.1中缓存的目的是为了在很多情况下减少发送请求,同时在许多情况下可以不需要发送完整响应。前者减少了网络回路(译注:一个请求会返回一个响应,请求响应这个过程就是一个回路)的数量;我们利用一个“过期(expiration)”机制来为此目的(见13.2节)。后者减少了网络应用的带宽;我们用“验证(validation)”机制来为此目的。

对行为,可行性,和关闭的操作的要求放松了语义透明性的目的。HTTP/1.1协议允许服务器,缓存,和客户端能显示地降低透明性当在必要的时候。然而,因为不透明的操作能混淆非专业的用户,同时可能和某个服务器应用程序不兼容(例如订购商品),因此此协议透明性在下面情况下才能被放松要求:

-- 只有在一个显示的协议层的请求时,透明性才能被客户端或源服务器放松

-- 当出现一个对终端用户的显示的警告时,透明性才能被缓存或被客户端放松

因此,HTTP/1.1协议提供这些重要的元素:

1.提供完整语义透明的协议特征,当这些特征被通信的所有方需要时

2. 允许源服务器或用户代理显示的请求和控制不透明操作的协议特征

3. 允许缓存给这样的响应绑定警告信息的协议特征,这些响应不能保留请求的语义透明的近似

一个基本的原则是客户端必须能够发现语义透明性的潜在的放松。

注意:服务器,缓存,或者客户端的实现者可能会面对设计上的判断,而这些判断没有显示地在此规范里讨论。如果一个判断可能会影响语义透明性,那么实现者应该能维持语义透明性,除非一个仔细的完整的分析能说明打破透明性的好处。

13.1.1缓存正确性(Cache Correctness)
一个正确的缓存必须能用最新的响应来响应请求,此响应当在下面的条件满足时才适合此请求(见13.2.5,13.2.6,和13.12)

此缓存响应已被检测与假设通过源服务器重验证后源服务器返回的响应相等价。

此缓存响应是足够保鲜(fresh)的(见13.2节)。缺省的情况下,这意味着此响应必须满足客户端,源服务器,和缓存的最严格的保鲜要求(见14.9节);如果源服务器指定了保鲜寿命,这说明它是源服务器自己的保鲜要求。

由于客户端和源服务器的最严格的保鲜要求,如果一个缓存的响应不是足够保鲜的,那么在仔细考虑的情况下,缓存可能仍然返回此缓存的响应通过合适的Warning头域(见13.1.5和14.46节),除非此响应被阻止(例如:通过”no-store” cache-directive ,或者通过一个”no-cache”cache-request-directive;见14.9节)。

此缓存响应是一个304(没有被改变),305(代理重定向),或 错误(4xx或者5xx)响应消息。

如果缓存不能同源服务器通信,那么一个正确的缓存应该用它缓存的响应去响应请求,如果此缓存的响应能正确的服务于请求;如果不能服务器于此请求,那么缓存必须能返回一个错误或警告指示存在通信失败。

如果缓存从服务器端接收到一个响应(或者是一个完整的响应,或者一个304(没有被改变)的响应),此响应应该是正常情况下要发送到请求的客户端的,并且此响应并不是新鲜的,那么此缓存应该把此响应转发给请求客户端不需要添加一个新的Warning头域(但是没有移去已经存在的Warning头域)。缓存并不是简单的因为传输中响应变得陈旧而尝试去重验证响应;这可能会导致一个无限的循环。用户代理接收一个陈旧的没有Warning头域的响应应该提示用户一个警告信息。

13.1.2警告信息(Warnings)
无论何时,缓存返回一个响应,此响应既不是第一手的(first-hand)也不是足够保鲜(在13.1.1节的条件2),那么缓存必须利用一个Warning常用头域来警告产生的效果。Warning头域和当前定义的警告在14.46节里描述。这些警告允许客户端去采取合适的动作。

警告可能被用于其他的目的,和缓存相关的目的和其他的目的。警告和错误状态码的区别在于是否是真正的失败。

警告被赋予三位数字warn-codes。第一个数字指明:警告是否必须或不必须从缓存项里删除,在一个成功的重验证之后。

1xx 警告描述了响应的保鲜或重验证状态信息,并且这些信息应该在一个成功的重验证之后删除。1xx警告码可能是由缓存产生的,当缓存验证一个缓存项时。此警告码不能被客户端产生。

2xx 警告描述了实体主体或实体头域的某些方面的信息,这些信息不能被重验证修改,并且这些信息不能在一个成功重验证之后被删除。

见14.46节关于警告码的定义。

HTTP/1.0缓存将缓存所有响应中的警告,并且不会删除第一类警告。穿过HTTP/1.0缓存响应中的警告会携带一个额外的warning-date域,这是为了防止将来的HTTP/1.1接收端信任一个错误的缓存警告。

警告同样携带一个警告文本。此文本可能是任何合适的自然语义(可能基于客户端请求的Accept头域),同时包含一个可选择的关于何种字符集被使用的声明。

多个警告可能会绑定一个响应(或者被源服务器或者被一个缓存发送的),这包括多个警告可以共用一个警告码。例如,服务器可能会以英语和法语提供相同的警告。

当多个警告绑定一个响应时,有时候不可能把所有的警告都展示给客户。HTTP版本不能指定一个严格的优先值去决定警告的优先和顺序显示,但是可以探索一些方法。

13.1.3缓存控制机制 (Cache-control Mechanism)
HTTP/1.1基本的缓存机制(服务器指定过期时间和验证器)对缓存是隐含的指令。某些情况下,服务器或客户端可能需要给HTTP缓存提供显示的指令。我们利用Cache-Control头域为此目的。

Cache-Control头域允许客户端或服务器在请求或响应里传输多个指令。这些指令常常覆盖缺省的缓存算法。作为一个常用规则,如果头域值中存在一个明显的冲突,那么最具严格解释的头域值会被应用(也就是说,能保留语义透明性的值)。然而,一些情况下,cache-control指令被显示地指定用来削弱语义透明性的相似性(例如,”max-stale” 或者 “public”)。

------分隔线----------------------------
标签(Tag):HTTP协议
------分隔线----------------------------
推荐内容
猜你感兴趣