《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中 ...
随机推荐
- 项目实战02:LVS 实现负载均衡
目录 实现基于LVS负载均衡集群的电商网站架构 实战一:LVS的NAT模式实现负载均衡 实战二:LVS的DR 模式实现负载均衡 实战三:实现80.443端口都可访问服务,且LVS实现持久连接 实验四: ...
- mysql脚本手动修改成oracle脚本
今天有一个需求,立了一个新项目,新项目初步定了使用了现有的框架,但数据库要求由原来的mysql改成oracle,所以原来的基础版本的数据库脚本就需要修改成符合oracle的脚本,修改完成后,总结了一下 ...
- HTML链接式引入CSS和JS
<!-调用CSS-> <link href="./XXXXX.css" rel="stylesheet" type="text/cs ...
- 消息服务jms
jms是java消息服务的规范,也即接口,activemq是实现.队列模型和发布订阅模型很像,区别就是队列,多个消费者消费不同的消息(这些消费者整体消费完生产者生产的队列的消息),发布订阅模型是多个消 ...
- Kafka实践1--Producer
一.Kafka设计原理参考: http://blog.csdn.net/suifeng3051/article/details/48053965?locationNum=2 http://www.cn ...
- python frist lesson
1.print("") 代表打印字符段 2.name2 = name ,然后改变name的赋值,name2的值还是以前name的值,说明name2指向的是内存中name的赋值. 3 ...
- DOIS 2019 DevOps国际峰会北京站来袭~
DevOps 国际峰会是国内唯一的国际性 DevOps 技术峰会,由 OSCAR 联盟指导.DevOps 时代社区与高效运维社区联合主办,共邀全球80余名顶级专家畅谈 DevOps 体系与方法.过程与 ...
- Python str byte 互相转换
- 解救小哈——dfs深搜
问题描述: 小哈去玩迷宫,结果迷路了,小哼去救小哈.迷宫由n行m列的单元格组成(n和m都小于等于50),每个单元格要么是空地,要么是障碍物. 问题:帮小哼找到一条从迷宫的起点通往小哈所在位置的最短路径 ...
- C#串口通信遇到的坑
C#串口通信中有一个DataReceived事件可以委托一个接收函数.此接收函数是运行在辅线程(secondary thread)上的.如果要在这个函数中修改主线程中的一些元素,比如UI界面上的变量的 ...