如果把 「HTTP 报文」想象为因特网货运系统的「箱子」,那么「HTTP 实体」就是报文中的实际的「货物」.

其中,实体又包含了「实体首部」 和 「实体主体」,实体首部用于描述各种参数,实体主体就是原始货物.

常见的实体首部

实体的大小: Content-Length

定义:

报文的字节的数量

功能:

HTTP 的早期版本用 Content-Length.来判断是否关闭连接,进而判断报文结束.
注意:

  1. 持久连接必须有 Content-Length ,因为连接是持久的,因此客户端无法依赖连接关闭来判别报文的结束.
  2. 经过内容编码之后,说明的是编码之后的报文主体的长度.

实体摘要: Content-MD5

定义:对报文主体进行 MD5 算法得到的结果
功能:防止报文被篡改

媒体类型: Content-Type

定义:主体的 MIME 类型
注意:经过内容编码之后, Content-type 首部说明的仍是编码之前实体主体的类型.

一种Content-type:multipart

定义:报文中存在多个报文,合成一个复杂的报文发送
功能:支持多部分主体,常常用于填写表格

内容编码: Content-Encoding

定义:为了达到减少传输时间的目的,对主体内容进行压缩.

类型:

内容编码的类型是 Content-Encoding 的值,有下面几种:

  1. gzip
  2. compress
  3. deflate
  4. identity(没有编码,当没有 Content-Encoding 时的值)

传输编码: Transfer-Encoding

定义

与内容编码仅仅把报文主体内容编码不同, 传输编码将整个报文进行编码.

分块编码

定义:将报文分割为大小已知的块,块与块紧挨着发送.
格式:以长度值为 0 的块代表主体结束.
特点:不需要知道 Content-length(在主体是动态创建的情况下很实用)

实例操控 instance manipulations

定义:在不同的时间下,一个对象可能有不同的版本.要求客户端能够标示它所拥有的资源的副本,并且在一定的条件下请求实例.
主要有两种办法进行实体操控:

  1. 范围请求
  2. 差异编码

范围请求:Accept-Ranges

定义:

允许客户端在副本不再有效的情况下,不请求完整副本,只请求文档的一个范围

应用:

下载中断的文件在重新下载时不需要重头开始下载.

差异编码:A-IM

定义:

当页面的内容发生变化的时候,即使改动的内容很少,也要重新请求.
差异编码指的是客户端愿意服务器只发送改变的部分,以更快地得到更新的页面.

A-IM 这个 header

A-IM: 是 Accept Instance Manipulation 的缩写,其功能相当于:

客户端说:“哦,对了,我能接受某些形式的实例操控,如果你会其中的一种的话,就不用发完整的文档给我了.”

缺陷

如果一个网页更新比较频繁,服务器为了能够更快地进行差异计算,于是需要把各个版本的文档储存在服务器上,导致硬盘的空间减少.

《HTTP 权威指南》笔记:第十五章 实体与编码的更多相关文章

  1. Gradle 1.12用户指南翻译——第二十五章. Scala 插件

    其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...

  2. Programming In Scala笔记-第十五章、Case Classes和模式匹配

    本章主要分析case classes和模式匹配(pattern matching). 一.简单例子 接下来首先以一个包含case classes和模式匹配的例子来展开本章内容. 下面的例子中将模拟实现 ...

  3. [hadoop读书笔记] 第十五章 sqoop1.4.6小实验 - 数据在mysq和hdfs之间的相互转换

    P573 从mysql导入数据到hdfs 第一步:在mysql中创建待导入的数据 1.创建数据库并允许所有用户访问该数据库 mysql -h 192.168.200.250 -u root -p CR ...

  4. 学习笔记 第十五章 JavaScript基础

    第15章   JavaScript基础 [学习重点] 了解JavaScript基础知识 熟悉常量和变量 能够使用表达式和运算符 正确使用语句 能够掌握数据类型和转换的基本方法 正确使用函数.对象.数组 ...

  5. Linux 笔记 - 第十五章 MySQL 常用操作和 phpMyAdmin

    博客地址:http://www.moonxy.com 一.前言 前面几章介绍了 MySQL 的安装和简单的配置,只会这些还不够,作为 Linux 系统管理员,我们还需要掌握一些基本的操作,以满足日常管 ...

  6. 《JS权威指南学习总结--第五章语句》

    内容要点: 一.throw语句     所谓异常是当发生了某种异常情况或错误时产生的一个信号.     抛出异常就是用信号通知发生了错误或异常状况.     捕获异常时指处理这个信号,即采取必要的手段 ...

  7. [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 ...

  8. [hadoop读书笔记] 第十五章 sqoop1.4.6小实验 - 将mysq数据导入HBASE

    导入命令 sqoop import --connect jdbc:mysql://192.168.200.250:3306/sqoop --table widgets --hbase-create-t ...

  9. 《Java编程思想》笔记 第十五章 泛型

    1 泛型 “泛型”意思就是适用于许多类型. 使用泛型的目的之一: 指定容器持有什么类型,让编译器确保正确性,而不是在运行期发现错误. 这个容器可以看成是有其他类型对象作为成员的类,而不单单只是JDK中 ...

随机推荐

  1. [httpd] httpd server 在低负载的情况下对SYN无响应

    如题: 两台client通过load balance访问httpd server.两个client交互访问.load balance处于fullnat模式. server在低负载情况下,常常对某一个c ...

  2. xss脚本绕过限制的方法

    第一关:第一关比较简单,直接写入标签就可以,这里不多说了,payload如下: http://sqler.win/xss/level1.php?name=test%3Csvg/onload=alert ...

  3. scrollview嵌套tableview

    之前写过一次,忘记了, 用的通知 FS

  4. python摸爬滚打之day022----模块(序列化操作)

    1.pickle 可以将我们python中的任意数据类型转化成bytes并写入到文件中.  同样也可以把文件中写好的bytes转换回我们python的数据. pickle可以直接序列化对象. clas ...

  5. 面试题----入参两个Integer,无返回值,然后使这个两个值在调用函数后交换

    我最近看到过一个比较好玩的面试题. 写个方法,入参两个Integer,无返回值,然后使这个两个值在调用函数后交换 很有意思的一个题目,引发我的深思,根据一路的学习过来,下面把实现代码贴出来,方便学习. ...

  6. 20190422 SQL SERVER 服务

    -- 数据库服务-- SQL Server(MSSQLSERVER)是必须要开启的,这个是数据库引擎服务,就像汽车的发动机一样-- SQL Server代理(MSSQLSERVER)是代理服务,比如你 ...

  7. SybaseIQ上SQL基本使用

    锁定: sp_iqlocks 踢人: 存储过程查找: sybase central里面查询的命令(查找过滤器例如:%table%),Sybase Central/Sybase IQ 15/服务器/xx ...

  8. 小程序图表wx-chart

    下载地址 https://github.com/xiaolin3303/wx-charts 使用步骤: 一.解压后,把dist里面的wxcharts.js或者wxcharts-min.js放在小程序的 ...

  9. 三、UI开发之核心基础——约束(入门)

    先学个新技能:添加图片控件Image View iOS的图片控件是ImageView,ImageView通过提前载入用户指定的图片资源来显示相应的图片. 所以图片控件的关键信息有3个: 1. Imag ...

  10. C#设计模式(10)——组合模式(Composite Pattern)(转)

    一.引言 在软件开发过程中,我们经常会遇到处理简单对象和复合对象的情况,例如对操作系统中目录的处理就是这样的一个例子,因为目录可以包括单独的文件,也可以包括文件夹,文件夹又是由文件组成的,由于简单对象 ...