《HTTP 权威指南》笔记:第十五章 实体与编码

如果把 「HTTP 报文」想象为因特网货运系统的「箱子」,那么「HTTP 实体」就是报文中的实际的「货物」.
其中,实体又包含了「实体首部」 和 「实体主体」,实体首部用于描述各种参数,实体主体就是原始货物.
常见的实体首部
实体的大小: Content-Length
定义:
报文的字节的数量
功能:
HTTP 的早期版本用 Content-Length.来判断是否关闭连接,进而判断报文结束.
注意:
- 持久连接必须有 Content-Length ,因为连接是持久的,因此客户端无法依赖连接关闭来判别报文的结束.
- 经过内容编码之后,说明的是编码之后的报文主体的长度.
实体摘要: Content-MD5
定义:对报文主体进行 MD5 算法得到的结果
功能:防止报文被篡改
媒体类型: Content-Type
定义:主体的 MIME 类型
注意:经过内容编码之后, Content-type 首部说明的仍是编码之前实体主体的类型.
一种Content-type:multipart
定义:报文中存在多个报文,合成一个复杂的报文发送
功能:支持多部分主体,常常用于填写表格
内容编码: Content-Encoding
定义:为了达到减少传输时间的目的,对主体内容进行压缩.
类型:
内容编码的类型是 Content-Encoding 的值,有下面几种:
- gzip
- compress
- deflate
- identity(没有编码,当没有 Content-Encoding 时的值)
传输编码: Transfer-Encoding
定义
与内容编码仅仅把报文主体内容编码不同, 传输编码将整个报文进行编码.
分块编码
定义:将报文分割为大小已知的块,块与块紧挨着发送.
格式:以长度值为 0 的块代表主体结束.
特点:不需要知道 Content-length(在主体是动态创建的情况下很实用)
实例操控 instance manipulations
定义:在不同的时间下,一个对象可能有不同的版本.要求客户端能够标示它所拥有的资源的副本,并且在一定的条件下请求实例.
主要有两种办法进行实体操控:
- 范围请求
- 差异编码
范围请求:Accept-Ranges
定义:
允许客户端在副本不再有效的情况下,不请求完整副本,只请求文档的一个范围
应用:
下载中断的文件在重新下载时不需要重头开始下载.
差异编码:A-IM
定义:
当页面的内容发生变化的时候,即使改动的内容很少,也要重新请求.
差异编码指的是客户端愿意服务器只发送改变的部分,以更快地得到更新的页面.
A-IM 这个 header
A-IM: 是 Accept Instance Manipulation 的缩写,其功能相当于:
客户端说:“哦,对了,我能接受某些形式的实例操控,如果你会其中的一种的话,就不用发完整的文档给我了.”
缺陷
如果一个网页更新比较频繁,服务器为了能够更快地进行差异计算,于是需要把各个版本的文档储存在服务器上,导致硬盘的空间减少.
《HTTP 权威指南》笔记:第十五章 实体与编码的更多相关文章
- Gradle 1.12用户指南翻译——第二十五章. Scala 插件
其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...
- Programming In Scala笔记-第十五章、Case Classes和模式匹配
本章主要分析case classes和模式匹配(pattern matching). 一.简单例子 接下来首先以一个包含case classes和模式匹配的例子来展开本章内容. 下面的例子中将模拟实现 ...
- [hadoop读书笔记] 第十五章 sqoop1.4.6小实验 - 数据在mysq和hdfs之间的相互转换
P573 从mysql导入数据到hdfs 第一步:在mysql中创建待导入的数据 1.创建数据库并允许所有用户访问该数据库 mysql -h 192.168.200.250 -u root -p CR ...
- 学习笔记 第十五章 JavaScript基础
第15章 JavaScript基础 [学习重点] 了解JavaScript基础知识 熟悉常量和变量 能够使用表达式和运算符 正确使用语句 能够掌握数据类型和转换的基本方法 正确使用函数.对象.数组 ...
- Linux 笔记 - 第十五章 MySQL 常用操作和 phpMyAdmin
博客地址:http://www.moonxy.com 一.前言 前面几章介绍了 MySQL 的安装和简单的配置,只会这些还不够,作为 Linux 系统管理员,我们还需要掌握一些基本的操作,以满足日常管 ...
- 《JS权威指南学习总结--第五章语句》
内容要点: 一.throw语句 所谓异常是当发生了某种异常情况或错误时产生的一个信号. 抛出异常就是用信号通知发生了错误或异常状况. 捕获异常时指处理这个信号,即采取必要的手段 ...
- [hadoop读书笔记] 第十五章 sqoop1.4.6小实验 - 将mysq数据导入hive
安装hive 1.下载hive-2.1.1(搭配hadoop版本为2.7.3) 2.解压到文件夹下 /wdcloud/app/hive-2.1.1 3.配置环境变量 4.在mysql上创建元数据库hi ...
- [hadoop读书笔记] 第十五章 sqoop1.4.6小实验 - 将mysq数据导入HBASE
导入命令 sqoop import --connect jdbc:mysql://192.168.200.250:3306/sqoop --table widgets --hbase-create-t ...
- 《Java编程思想》笔记 第十五章 泛型
1 泛型 “泛型”意思就是适用于许多类型. 使用泛型的目的之一: 指定容器持有什么类型,让编译器确保正确性,而不是在运行期发现错误. 这个容器可以看成是有其他类型对象作为成员的类,而不单单只是JDK中 ...
随机推荐
- Mycat原理、应用场景
Mycat原理 Mycat的原理并不复杂,复杂的是代码,如果代码也不复杂,那么早就成为一个传说了.Mycat的原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的SQL语句,首先对SQL语句做了一 ...
- 手机连接wamp网页
1.改变wamp的put online 状态 Right click Wampmanager -> WAMPSetting -> Menu Item: Online/Offline
- Linux下的文件系统2
2017-03-13 上文针对VFS的基本信息做了介绍,并简单介绍了VFS涉及的几个数据机构,本节结合LInux源码,对各个结构之间的关系进行分析. 一.总体架构图 总体架构图如上图所示,结合进程访问 ...
- Spark入门到精通--(第一节)Spark的前世今生
最近由于公司慢慢往spark方面开始转型,本人也开始学习,今后陆续会更新一些spark学习的新的体会,希望能够和大家一起分享和进步. Spark是什么? Apache Spark™ is a fast ...
- Centos7下搭建LAMP环境,安装wordpress(不会生产博客,只是一名博客搬运工)(菜鸟)
1.搭建MySQL数据库 安装MariaDB yum install mariadb-server -y 启动MySQL服务 emctl start mariadb #启动服务 emtcl enabl ...
- vue 点击弹窗外框关闭弹框
https://blog.csdn.net/zjw0742/article/details/77822777 ready() { document.addEventListener('click', ...
- python获取一年所有的日期
python获取一年所有的日期 自动识别闰年. import arrow def isLeapYear(years): ''' 通过判断闰年,获取年份years下一年的总天数 :param years ...
- TableExport导出失败问题
本周有一个需求,将一个网页上一个js导出成csv文件,供数据分析使用 找到一个插件,TableExport,可以很方便的将table导出(默认设置的话,仅需一行代码) 但是,这导出文件较大(6.2M) ...
- WebDriver与文件系统
1.屏幕截屏操作:其接口函数是TakesScreenshot.该功能是在运行测试用例的过程中,需要验证某个元素的状态或者显示的数值时,可以将屏幕截取下来进行对比:或者在异常或者错误发生的时候将屏幕截取 ...
- 【Linux】-NO.87.Assembly.1.滴水逆向.1.001-【介绍】-
1.0.0 Summary Tittle:[Linux]-NO.87.Assembly.1.滴水逆向.1.001-[基础]- Style:Java Series:Log4j Since:2017-04 ...