《HTTP权威指南》读书笔记(六)-实体和编码

一、实体首部

HTTP实体首部描述了HTTP报名的内容。HTTP/1.1版定义了以下10个基本字体首部字段。

  • Content-Type:实体中所承载对象的类型
  • Content-Length:所传送实体的长度或大小
  • Content-Language:与所传送对象最相配的人类语言
  • Content-Encoding:对象数据所做的任意变换(例如压缩)
  • Content-Location:一个备用位置,请求时可通过它获得对象
  • Content-Range:如果这是部分实体,这个首部说明它是整体的哪个部分
  • Content-MD5:实体主体内容和检验和
  • Last-Modified:所传输内容在服务器上创建或最后修改日期时间
  • Expires:实体数据将要失效的日期时间
  • Allow:该资源所允许的各种请求方法,例如GET和HEAD
  • ETag:文档特定的唯一验证码
  • Cache-Control:指出应该如何缓存该文档

二、内容编码

内容编码的过程如下:

1、网站服务器生成原始响应报文,其中有原始的Content-Type和Content-Length首部

2、内容编码服务器(也可能就是原始的服务器或下行的代理)创建编码后的报文。编码后的报文有同样的Content-Type,但Content-Length可能不同(例如主体被压缩)。内容编码服务器在编码后的报文中增加Content-Encoding首部,这样接收的应用程序就可以进行解码了。

3、接收程序得到编码后的报文,进行解码,获得原始报文。

常用的内容编码类型有:gzip(效率最高)、compress、deflate、identity(前三者是无损压缩,不会导致信息损失)

同时,为了避免服务器使用客户端不支持的编码方式,客户端就把自己支持的内容编码方式列表放在请求的Accept-Encoding首部里发出去。如果客户端HTTP请求没有Accept-Encoding首部,那么服务器可以假设客户端可以接受任何编码方式(等价于发送Accept-Encoding:*)

客户端可以给每种编码附带Q(质量)值参数来说明编码的优先级。Q值范围从0.0到1.0,0.1说明客户端不想接受所说明的编码,1.0则表示最希望使用的编码。*表示任何其它方法。

三、传输编码和分块编码

HTTP协议中只定义了下面两个首部来描述和控制传输编码。

Transfer-Encoding:告知接收方为了可靠地传输报文,已经对其进行了何种编码。

TE:用在请求首部中,告知服务器可以使用哪些传输编码扩展。

最新的HTTP规范只定义了一种传输编码:分块编码

分块编码

分块编码把报文分割为若干个大小已知的块。块之间是紧挨着发送的,这样就不需要在发送之前知道整个报文的大小了。它是一种传输编码,因此是报文的属性,而不是文体的属性。

分块报文的拖挂:拖挂中可以包含附带的首部字段,它们的值在报文开始的时候可能是无法确定的(例如必须要先生成主体的内容)。Content-MD5首部就是一个可以在拖挂中发送的首部,因为在文档生成之前,很难算出它的MD5。

四、范围请求

假设你正通过慢速的调制解调器下载最新的热门电影,已经下载了四分之三,忽然因为一个网络故障连接中断了而要被迫全部重头再来有多么糟糕。

有了范围请求,HTTP客户端可以通过请求曾获取失败的实体的一个范围(一部分)来恢复下载该实体。当然这有一个前提,那就是客户端上一次请求该实体到这次发出范围请求的时间段内,该对象没有改变过。例如:Range:bytes=4000- (从4000字节之后的部分开始)

并不是所有的服务器都接受范围请求,但很多服务器可以。服务器可以通过在响应中包含Accept-Ranges首部的形式向客户端说明可以接受的范围请求,这个首部通常以字节计算的。

Range首部流行在点对点(Peer to Peer)文件共享客户端软件中得到广泛应用,它们从不同的对等实体同时下载多媒体文件的不同部分。

四、差异编码

如果服务器有页面更新的实例,当客户端请求该过期的副本时,哪怕页面上只有一小部分发生了改变,也要把完整的新页面实例发给客户端。若改变的地方比较少,与其发送完整的新页面给客户端,客户端更愿意服务器只发送页面发生改变的部分,这样就可以更快地得到最新的页面。差异编码是HTTP协议的一个扩展,它通过交换对象改变的部分而不是完整的对象来优化传输性能。

如果客户端想告诉服务器它愿意接受该页面的差异,只要发送A-IM首部就可以了。A-IM是Accept-Instance-Manipulation(接受实例操控)的缩写。服务端发送回下面这些内容:一个特殊的响应代码--226 IM Used,告知客户端它正在发送的是所请求对象的实例操控,而不是那个完整的对象自身;一个IM首部,说明用于计算差异的算法,新的ETag首部和Delta-Base首部,说明用于计算差异的基线文档的ETag,整个过程由实例操控、差异生成器、差异应用器共同完成。

ETag:由服务器在响应中发送,客户端在后继请求中可以使用它。

If-None-Match:客户端发送请求首部,当且仅当客户端的文档版本与服务器不同时,才向服务器请求该文档。

A-IM:客户端请求首部,说明可以接受的实例操控类型

IM:服务器响应首部,说明作用在响应上的实例操控的类型。当响应代码是226 IM Used时,会发送这个首部。

Delta-Base:服务器响应首部,说明用于计算差异的基线文档的ETag值(应该与客户端请求中的If-None-Match首部里的ETag相同)

时间: 2024-09-30 22:51:41

《HTTP权威指南》读书笔记(六)-实体和编码的相关文章

Hadoop权威指南读书笔记

本书中提到的Hadoop项目简述 Common:一组分布式文件系统和通用I/O的组件与接口(序列化.javaRPC和持久化数据结构). Avro:一种支持高效.跨语言的RPC以及永久存储数据的序列化系统. MapReduce:分布式数据处理模型和执行环境,运行于大型商业集群. HDFS:分布式文件系统,运行于大型商用机集群. Pig:一种数据流语言和运行环境,用以检索非常大的数据集.Pig运行在MapReduce和HDFS的集群上. Hive:一个分布式.按列存储的数据仓库.Hive管理HDFS

IDA.Pro权威指南 读书笔记

http://www.pediy.com/kssd/pediy12/142766.html 标 题:IDA.Pro权威指南 读书笔记[Made By C_lemon] 作 者:Dstlemoner 时 间:2011-11-14 11:56:17 链 接:http://bbs.pediy.com/showthread.php?t=142766    IDA为反汇编 和逆向破解的 静态分析利器 ! 虽然是利器,但是你不会用的话~那就另当别论了. →     唉.对于刚入门的新手来说,看前人走过的路程

Android编程权威指南-读书笔记(二)-第一个小程序

Android编程权威指南-读书笔记(二) -第一个小程序 第一个例子介绍 应用名为GeoQuiz.用户通过单击True或False按钮来回答屏幕上的问题,GeoQuiz可即时反馈答案正确与否. 这个例子为我们简单介绍了几个基本组件的使用,以及基本的事件监听.让我们对基本组件的使用和事件的监听有一个基本的了解. 这篇文章分为2个部分,第一部分就是创建简单的UI.第二个部分就是对这个UI增加代码来响应一些操作. (注:所有不明白或者不理解的东西其实都不重要,后面都会有更详细的介绍.) 本章的目标

css权威指南 读书笔记

网上看见推荐的书总是喜欢买回家,但是大多数时候都不会立即就看,都是在书橱里蒙上了一层灰尘.从毕业到现在,由于公司业务原因,写js多余css,所以就想系统地看看css,并且做一些练习,于是就开始看<css权威指南>,看到了第六章,初步感觉,对于工作一年的我来说,很简单,当然也有一些我不熟悉的知识点,于是整理了下来. 一.@import 1.放在style容器中,且在其他css规则之前 2.每个人@import指令的样式都会加载使用 二.选择器 1.:first-letter 用于选取指定选择器的

JS权威指南读书笔记(六)

第十五章 脚本化文档 1 文档对象模型(DOM)是表示和操作HTML和XML文档内容的基础API. 2 文档节点的部分层次结构 Text和CDATASection都是characterData的子类型. 3 getElementsByNames() 定义在HTMLDocument类中,而不是Document(文档可能代表HTML也可能代表XML) 类中,所以只针对HTML文档可用. 4 由于历史原因,HTMLDocument类定义了一些快捷属性来访问各种各样的节点.例如:images.forms

HTTP权威指南读书笔记

1.8 web组件结构: 代理 :位于客户端和服务器之间的HTTP中间实体 缓存 :HTTP的仓库,使常用页面的副本可以保存在离客户端很近的地方 网关 :链接其他应用程序的特殊web服务器(如邮件服务) 隧道 :对HTTP通信报文进行盲转的特殊代理 Agent代理:发起自动HTTP请求的半智能web客户端 1.8.1 代理: 原理:代理存在与客户端与服务器之间,接受客户端的HTTP请求并且转发给服务器 1.8.2 缓存: 原理:web缓存是一种特殊的HTTP代理服务器,可以将经过代理传送的常用文

Http权威指南---读书笔记

Chart1 ====概述==== 最简单的的资源是web服务器文件系统中的静态文件.当然可以上动态,但要经过网关?(不确定) 下面见图: 2.  URI(uniform Resource Identifier) 同一资源标识符:类比邮政地址 URI可以有两种格式 1.URL(同一资源定位符) 2.URN (1) URL:分为三个部分,1.协议(http://)2.地址(www.baidu.com)3.特定资源:/1.pic (2) URN:开发阶段  3.  常见的HTTP方法: 4.  协议

JS权威指南读书笔记(二)

第四章 表达式和运算符 1 new调用构造函数的过程 a 创建一个新的空对象 b 设置空对象的_proto_指向构造函数原型prototype c 将这个新对象当做this的值来调用构造函数 d 如果构造函数不返回一个对象值,则返回新对象 2 左值:表示存储在计算机内存的对象. 3 除数为0的运算结果是正无穷大或负无穷大,0/0的结果是NaN. 4 位运算符会将NaN.Infinity和-Infinity都转换为0. 5 in运算符希望它的左操作数是一个字符串或可以转换为字符串,右操作数是一个对

HBase权威指南读书笔记(一)

第一章HBase简介 1.  HBase即hadoop数据库,HBase是一个分布式的.持久的.强一致性的存储系统,具有近似最优的写性能和出色的读性能. 2.  HBase并不是一个列式存储的数据库,但它利用了磁盘上的列式存储格式.传统的列式存储数据库适合实时存取数据的场景,HBase适合键值对的数据存储,或者有序的数据存储. 3.  一行由若干列组成,若干列又构成了一个列族(column family).列族数量只限于几十,实际上更少.而列的数量没有限制,一个列族里面可以有数百万个列,列值也没

JavaScript权威指南读书笔记【第一章】

第一章 JavaScript概述 前端三大技能: HTML: 描述网页内容 CSS: 描述网页样式 JavaScript: 描述网页行为 特点:动态.弱类型.适合面向对象和函数式编程的风格 语法源自Java 一等函数来自Scheme 基于原型的继承来自于Self 名字和版本: JavaScript是由网景(Netscape)公司创建,“JavaScript”是Sun MicroSystem公司的注册商标,用来特指网景(Mozilla)对着门的实现. ECMAScript: 网景将这么语言作为标准