`

HTTP 1.1的一些细节:Cache机制

阅读更多

HTTP 1.1的一些细节:Cache机制

Du XiaoGang <dugang@188.com >


     Cache机制可能是HTTP 1.1协议中最复杂的一个组成部分,它的目的有两个:
        1, 降低网络上发送HTTP请求的次数,这采用"过期"机制(Expiration Mechanism).
        2, 降低网络上完整回复HTTP请求包的次数,这采用"确证"机制(Validation Mechanism).

    首先描述"过期"机制的模型.

     HTTP Cache机制的最理想目标是使客户端根本不发起非必要的请求.
     它的基本原理是为每个被请求实体(Entity)设定一个内容将变更的时间点,从该实体第一次被请求后到这个时间点到达之前实体的内容是不变的,因而可以 直接使用Cache中缓存的内容满足针对该实体的后续请求,而不必每次由源HTTP服务器做响应.
     HTTP服务器通过两种实体头(Entity-Header)来实现"过期"机制:Expires头和Cache-Control头的max-age子 项.

    其次是"验证"机制模型.

     HTTP服务器为每个作为响应发送的实体附加一个"验证子",当Cache中的响应"过期"后,Cache将该验证子发送给HTTP源服务器以验证是否该 响应已确实过期. 如果确认过期则源服务器发送新响应包,否则只发送改变的实体头,这种机制可有效节省带宽.


     HTTP服务器通过两种方式实现该"验证子":ETag以及Last-Modified Date.验证子的特点在于它会随着所代表实体的变化而变化,就像是实体的指纹,而且验证子可分为强验证子和弱验证子两种,强验证子会严格随实体变化而变 化,弱验证子则只是在实体发生显著变化时才变化.

    以下是与Cache相关的实体头:
    Date: 响应(包含实体)产生的时间.
    Expires: 时间值,该时间点之前可以认为对应实体内容不变.
    Cache-Control:Cache命令,主要有以下子项:
        public: 实体可被public类型的Cache缓存.
        private: 实体只对某个用户有效,不能被public类型的Cache缓存.
        no-cache: 实体不可被缓存.
        no- store : 实体不能被存储在非易失存储器中,应当在用完后被立即清除.
        max-age: 实体保持有效的最长时间,其优先级高于Expires指定时间.


    Age: 一般由响应路径中的Cache产生,表示自从响应发出到现在在Cache中所经过的时间.
    ETag: "验证子",一般为强性.
    Last-Modified: "验证子",一般为弱性,表示实体最后变更的时间.
    If-Match/If-None-Match/If-Modified-Since/If-Unmodified-Since:条件验证语 句,Match搭配ETag,当符合条件时执行请求. Modified搭配Last-Modified验证子,符合条件时执行请求.                                                                      



HTTP 1.1中有两个实体头(Entity-Header)直接与编码相关,分别为Content-Encoding和Transfer-Encoding.


     先说Content-Encoding, 该头表示实体已经采用了的编码方式.Content-Encoding是请求URL对应实体(Entity)本身的一部分.比如请求URL为 http://host/image.png.gz时,可能会得到的Content-Encoding为gzip.Content-Encoding的值 是不区分大小写的,目前HTTP1.1标准中已包括的有gzip/compress/deflate/identity等.


     与Content-Encoding头对应,HTTP请求中包含了一个Accept-Encoding头,该头用来说明用户代理(User- Agent,一般也就是浏览器)能接受哪些类型的编码. 如果HTTP请求中不存在该头,服务器可以认为用户代理能接受任何编码类型.

     接下来重点描述Transfer-Encoding, 该头表示为了达到安全传输或者数据压缩等目的而对实体进行的编码. Transfer-Encoding与Content-Encoding的不同之处在于:


        1, Transfer-Encoding只是在传输过程中才有的,并非请求URL对应实体的本身特性.
        2, Transfer-Encoding是一个"跳到跳"头,而Content-Encoding是"端到端"头.


     该头的用途举例如,请求URL为http://host/abc.txt,服务器发送数据时认为该文件可用gzip方式压缩以节省带宽,接收端看到 Transfer-Encoding为gzip首先进行解码然后才能得到请求实体.


      此外多个编码可能同时对同一实体使用,所以Transfer-Encoding头中编码顺序相当重要,它代表了解码的顺序过程.同样,Transfer- Encoding的值也是不区分大小写的,目前HTTP1.1标准中已包括的有gzip/compress/deflate/identity /chunked等.


     Transfer-Encoding中有一类特定编码:chunked编码.该编码将实体分块传送并逐块标明长度,直到长度为0块表示传输结束, 这在实体长度未知时特别有用(比如由数 据库 动态产生的数据). HTTP1.1标准规定,只要使用了Transfer-Encoding的地方就必须使用chunked编码,并且chunked必须为最后一层编码.任 何HTTP 1.1应用都必须能处理chunked编码.


      与Transfer-Encoding对应的请求头为TE,它主要表示请求发起者愿意接收的Transfer-Encoding类型. 如果TE为空或者不存在,则表示唯一能接受的类型为chunked.


      其他与Transfer-Encoding相关的头还包括Trailer,它与chunked编码相关,就不细述了.

      顾名思义,Content-Length表示传输的实体长度,以字节为单位(在请求方法为HEAD时表示会要发送的长度,但并不实际发 送.).Content-Length受Transfer-Encoding影响很大,只要Transfer-Encoding不为identity,则 实际传输长度由编码中的chunked决定,Content-Length即使存在也被忽略.

关于HTTP Message Body的长度

     在HTTP中有消息体(Message body)和实体(Entity body)之分,简单说来在没有Transfer-Encoding作用时,消息体就是实体,而应用了Transfer-Encoding后,消息体就是 编码后的实体,如下:


        Message body = Transfer-Encoding encode(Entity body)

     如何确定消息体的长度? HTTP 1.1标准给出了如下方法(按照优先级依次排列):
        1, 响应状态(Response Status)为1xx/204/304或者请求方法为HEAD时,消息体长度为0.
        2, 如果使用了非"identity"的Transfer-Encoding编码方式,则消息体长度由"chunked"编码决定,除非该消息以

            连接关闭为结束.
        3, 如果存在"Content-Length"实体头,则消息长度为该数值.
        3, 如果消息使用关闭连接方式代表消息体结束,则长度由关闭前收到的长度决定. 该条对HTTP Request包含的消息

            体不适用.

 

Quote: http://www.cnblogs.com/feney/archive/2009/10/18/1585497.html

分享到:
评论

相关推荐

    HTTP1.1.rar_http1.1

    此外,HTTP1.1还引入了管道机制(Pipelining)。在持久连接的基础上,客户端可以同时发送多个请求而无需等待服务器的响应,这进一步优化了并发处理,降低了延迟,尤其对于依赖多个资源的网页来说,改善了用户体验。 ...

    Http1.1协议pdf版

    此外,HTTP/1.1还引入了一些性能优化机制,如缓存控制(Cache-Control),使客户端可以存储和重用先前获取的响应;分块传输编码,允许大对象在未知总大小的情况下进行传输;以及内容编码(Content-Encoding),如...

    HTTP1.1协议中文版RFC2616

    - **HTTP/1.0**: 在1996年发布的RFC1945中,HTTP/1.0引入了更复杂的请求/响应机制,支持MIME格式的消息,但缺乏对分层代理、缓存的支持以及稳定的连接管理。 - **HTTP/1.1**: 为解决HTTP/1.0的不足,HTTP/1.1提供...

    HTTP1.1协议规范(中文归纳版)

    ### HTTP 1.1 协议规范中文归纳 #### 一、引言 ...自1990年诞生以来,HTTP协议已经经历了...以上是对HTTP 1.1协议规范的一些基本概念和技术细节的中文归纳总结。理解这些概念对于深入学习HTTP协议及其实现具有重要意义。

    HTTP1.1超文本传输协议.zip

    6. 缓存机制: HTTP1.1通过Cache-Control和ETag/If-None-Match等头字段增强了缓存功能,允许客户端在合适的时候使用本地缓存副本,减少了网络延迟。 7. 媒体类型: 通过Content-Type头,HTTP1.1能标识数据的MIME...

    RFC2616(HTTP1.1)协议文档

    - **缓存控制**:HTTP/1.1增强了缓存机制,引入了Cache-Control头部来更精细地控制缓存行为。 - **安全性增强**:虽然HTTP本身是不安全的,但HTTP/1.1为HTTPS的实现提供了更好的基础,HTTPS通过SSL/TLS协议实现...

    HTTP1.0&HTTP1.1(rfc2616)

    1. **持久连接**:HTTP1.1支持持久连接(Keep-Alive),允许在一个TCP连接上发送多个请求和响应,减少了连接建立和关闭的开销。 2. **管道机制**:在持久连接的基础上,HTTP1.1引入了请求管道,允许客户端同时发送...

    RFC 2616 HTTP 1.1 超文本传输协议(中文版有目录) pdf

    ### 知识点五:HTTP/1.1 的缓存机制 - **缓存控制**:通过设置缓存控制头(如`Cache-Control`和`Expires`),可以控制缓存的行为。 - **验证器**:通过使用条件请求(如`If-Modified-Since`和`ETag`),可以避免...

    rfc2616/HTTP/1.1中文版

    - **持久连接**:HTTP/1.1默认开启持久连接功能,允许在一个TCP连接上发送多个请求,从而提高了通信效率。 - **管道化**:客户端可以在收到前一个响应之前就发送下一个请求,减少了等待时间。 - **条件请求**:...

    http 协议英文文档 rfc2616

    - **无状态**:HTTP协议本身不保存任何会话状态,每次请求都是独立的,这要求服务器和客户端通过Cookie或Session等机制来维护状态。 2. **HTTP方法** - **GET**:获取资源,是最常见的请求方法,用于获取服务器...

    HTTP1.1.1.chm

    - **无状态**:HTTP协议本身不保存任何会话状态,每次请求都是独立的,这降低了服务器的存储负担,但也导致了Cookie等技术的出现来维持会话状态。 - **连接管理**:HTTP1.0默认使用短连接,即每个请求/响应对使用...

    cxl1.1协议的中文翻译版

    为了保证系统的安全和可靠性,CXL 1.1引入了多项机制: - **加密与认证**:支持数据传输过程中的加密,增强了通信安全性。 - **错误检测与纠正**:具备强大的错误检测和自动纠正能力,减少了数据损坏的风险。 ### ...

    http.rar_HTTP ppt_HTTP协议_http://brow

    7. 缓存机制: HTTP允许客户端缓存资源,通过Cache-Control和ETag等头字段来控制缓存策略,减少不必要的网络传输,提高访问速度。 8. 安全性: 虽然HTTP本身不提供安全保证,但可以通过HTTPS(HTTP over SSL/TLS...

    http头部cache-control字段解析

    HTTP头部的`Cache-Control`字段是HTTP协议中用于控制缓存行为的重要机制,它为客户端和服务器之间的数据传输提供了更多的灵活性和效率。本文将深入解析`Cache-Control`字段的含义、作用及其各种指令,帮助你更好地...

    RFC中文版精选(关于TCP/IP)

    - **缓存控制**:HTTP/1.1引入了更为灵活的缓存控制机制,通过`Cache-Control`头部字段来控制缓存行为,例如`no-cache`、`max-age`等。 - **错误处理**:改进了错误处理机制,如使用更明确的状态码来指示错误原因。 ...

    http学习

    - **缓存机制**:HTTP允许客户端缓存资源,通过Cache-Control、ETag等头部字段控制缓存策略。 2. **HTTP方法** - **GET**:获取指定资源,是最常见的请求方法,通常用于读取数据。 - **POST**:向服务器提交数据...

    CCIX_Base_Specification_Revision1.1_Version1.0.pdf

    《CCIX基础规范修订1.1版1.0》详细阐述了Cache Coherent Interconnect for Accelerators(CCIX)技术的起源、发展及其与Peripheral Component Interconnect Express(PCIe)的兼容性和区别。该规范旨在提供一个高...

    HTTP权威手册pdf版本

    以上只是HTTP权威手册中涉及的部分知识点,实际内容将涵盖更多细节,包括HTTP的完整交互过程、安全性和隐私考虑、HTTP在移动设备上的应用以及最佳实践等内容。通过深入学习,开发者可以更好地理解和利用HTTP来构建...

    http协议英文版

    8. **缓存机制**:HTTP 1.1引入了更完善的缓存控制策略,如`Cache-Control`和`ETag`,允许客户端缓存资源以减少网络延迟。 9. **范围请求**:通过`Range`首部,客户端可以请求资源的一部分,这对于断点续传下载或...

Global site tag (gtag.js) - Google Analytics