《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中 ...
随机推荐
- 线程同步-使用SimaphoreSlim类
SimaphoreSlim类是作为Semaphore类的轻量级版本的.该类限制了同时访问同一个资源的线程数量. 代码Demo: using System;using System.Threading; ...
- ASP.NET常见异常处理示例
将指定的年月日转初始化为DateTime新的实例(Nop.Admin.Controllers.OrderController.ParseProductAttributes) case Attribut ...
- redis3.0.3集群搭建
redis3.0版本之后支持Cluster,具体介绍redis集群我就不多说,了解请看redis中文简介. 首先,直接访问redis.io官网,下载redis.tar.gz,现在版本3.0.3,我下面 ...
- Python3下载图片的方法
1 第一种 from urllib import request request.urlretrieve(s, './图片1.jpg') # 第一种 # s是图片的网络地址,./图片1.jpg,是图片 ...
- 快速构建一个使用axios的vue应用程序(转)
英文原文:https://www.sitepoint.com/fetching-data-third-party-api-vue-axios/ 译文:https://segmentfault.com/ ...
- LINUX PID 1和SYSTEMD
LINUX PID 1和SYSTEMDhttp://coolshell.cn/articles/17998.html 要说清 Systemd,得先从 Linux 操作系统的启动说起.Linux 操作系 ...
- 实验二《Java面向对象程序设计》的一点说明
实验二<Java面向对象程序设计>的一点说明 本周的实验要求是: 完成实验二<Java面向对象程序设计>中的内容 其中Eclipse相关的内容参考Intellj IDEA 简易 ...
- vsCode工具做react开发,几个常用插件
一.环境准备: 1.下载安装VSCode,Node.js,Yarn 2.打开命令行终端或powershell,输入yarn global add create-react-app安装react的脚手架 ...
- OpenStack-Neutron-安全组
neutron中目前安全组的实现是使用iptables来实现的 创建安全组 创建安全组的时候默认有两条“出”规则(ipv4和ipv6) “default”安全组不仅有“出”规则,还有“入”规则.默认有 ...
- GALV_maptravel研究分析(1)
强大的地图传送式插件~~ 我以自带demo进行分析,本篇地图Init setting map 1.---------------------------------- 实例 创建地图 Galv.MAP ...