Http协议(3)—HTTP实体和编码

HTTP实体实现目标
.可以被正确识别(通过Content-Type和Content-Launage)
.可以被正确解包(通过Content-Lenght首部和Content-Encoding首部)
.是最新的(通过实体验证码和缓存过期控制)
.符合用户需要(基于Accept系列的内容协商首部)
.在网络上可以快速有效的传输(通过范围请求、差异编码以及其他数据压缩方法)
.完整到达、未被篡改(通过传输编码首部和Content-MD5校验和首部)

一、报文是箱子,实体是货物
1.HTTP基本实体首部
.Content-Type
实体所承载对象的类型
.Content-Length
实体主体的长度或大小
.Content-Launage
与所传送实体最相配的语言
.Content-Encoding
实体数据是不是已经被压缩
.Content-Location
备用位置
.Content-Range
如果这是部分实体,则说明它是整体的哪部分
.Content-MD5
实体主体内容的校验和
.Last-Modified
所传输的内容在服务器上创建或最后修改的日期
.Expires
实体数据将要失效的日期
.Allow
该资源所允许的各种请求方法,例如,GET、Post等
.ETag
这份文档特定实例的唯一验证码
.Cache-Control
应该如何缓存该文档

2.实体主体

二、Content-Length:实体的大小
1.检测截尾
客户端需要通过Content-Length来检测报文结尾以区分到底是报文结束时正常的连接关闭
还是报文传输时服务器崩溃而导致的连接关闭
缓存代理服务器不会为没有Content-Length首部的HTTP主题作缓存

2.错误的Content-Length

3.Content-Length与持久连接
因为持久连接,客户端无法通过连接关闭来判断报文是否结束,故必须带有Content-Length
首部.
但是当分块编码时可以没有Content-Length首部,因为数据分为一系列的块来传送,每块都    
有大小说明

4.内容编码
如果对主体进行了内容编码(压缩),则Content-Length就是编码后的主体的长度

5.确定实体主体长度的规则
a.如果特定的HTTP报文类型不允许带有主体,就忽略Content-Length首部
b.如果报文中含有描述传输编码的Transfer-Encoding,那实体就由一个称为零字节块的
特殊模式结束
c.如果报文中含有Content-Length首部,而没有Transfer-Encoding首部,那么Content-
Length的值就是主体的长度,如果两者皆有,则应该忽略Content-Length的值
d.如果报文使用了multipart/byteranges媒体类型,并且没有用Content-Length首部指定
实体主体长度,那么多部分报文的每个部分都要说明自己的大小 
e.如果以上规则均无法匹配,则就在连接关闭的时候结束     

三、实体摘要   发送方在生成初始主体时,生成一个数据校验和,接收方可以通过检查这个校验和来捕获所有
意外的实体修改  
服务器使用Content-MD5首部发送对实体主体运行MD5算法

四、媒体类型和字符集
Content-Type指明的是原始主体的媒体类型
1.文本的字符编码
Content-Type:text/html; charset=xxxxx

2.多部分媒体类型

3.多部分表格提交
Content-Type:multipart/form-data; boundary=[abcdefg......]
boundary表明分隔主题中不同部分所用的字符串

4.多部分范围响应
Content-Type:multipart/byteranges

五、内容编码
1.过程
a.网站服务器生成原始响应报文,其中有原始的Content-Type和Content-Length首部
b.内容编码服务器创建编码后的报文,并增加Content-Encoding首部,以便接受的应用程序
进行解码
c.接收程序得到编码后的报文,进行解码,获得原始报文

2.内容编码类型

3.Accept-Encoding首部
客户端会把自己能够识别的编码列表放在Accept-Encoding首部里发出去,如果http请求中
没有包含首部,则表示客户端可以接受任何编码方式

六、传输编码和分块编码
传输编码与内容编码的区别:
经过内容编码的报文只是对报文的实体部分进行编码,而对于经过传输编码的报文,编码
作用在整个报文上,报文自身的结构发生了变化

使用传输编码(Transfer-encoding)是为了改变报文中的数据在网络上的传输方式

1.可靠传输
传输报文会引发的问题
.未知的尺寸
有些网关应用程序或则内容编码器要想知道报文的大小,这时可以采用传输编码来发
送数据,并用特别的结束脚注表明数据结束
.安全性
可以用传输编码把报文内容扰乱,然后在共享的传输网络上发送

2.Transfer-Encoding
.Transfer-Encoding:
告知接收方为了可靠的传输报文,已经对其进行了何种编码
.TE:
用在请求首部,告知服务器可以使用哪些传输编码

3.分块编码
.把报文分割为若干大小已知的块,块之间是紧挨着发送的
.分块编码是一种传输编码,是报文的属性,而不是主体的属性

3.1.分块与持久连接
.若客户端与服务器不是持久连接,则服务端不需要知道它正在读取的主体的长度,只需
要读到服务器关闭主体连接为止
.服务器在写主体之前必须知道主体的大小,如果服务器动态创建内容,就无法知道长度,
分块编码只要服务器逐块发出并且说明每块大小即可,服务器可以用大小为0的块作为
主体结束的信号
3.2.分块报文的拖挂

4.内容编码与传输编码的结合

5.传输编码规则
.传输编码集合中必须包含分块,唯一的例外是使用关闭连接来结束报文
.当使用分块传输编码时,它必须是最后一个作用在报文中主体之上的
.分块传输编码不能多次作用到一个报文主体之上
以上规则使得接收方能确定报文的长度

七、验证码与新鲜度
1.新鲜度
.服务器告知客户端能够将内容缓存多长时间,在这个时间之内是新鲜的
.可以用Expires首部或者Cache-Control

2.有条件的请求和验证码
有条件的请求:
.当资源改变时才请求副本
.通过If-Modified-Since首部实现
验证码:
.弱验证码
.强验证码
强验证码能唯一标识一个实例

八、范围请求

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/273372.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

架构之美—软件架构6大步骤(开篇)

1> 需求分析2> 领域建模3> 确定关键需求4> 概念架构设计5> 细化架构设计6 架构验证 转载于:https://www.cnblogs.com/kool/p/6695766.html

Http协议(2)—客户端的识别与cookie机制

一、Http用户识别的机制1.承载用户身份的http首部2.客户端IP地址跟踪,根据客户端IP地址进行识别3.用户登录,用认证方式识别用户4.胖URL,一种在URL中嵌入识别信息的技术5.cookie,一种持久身份识别技术二、HTTP首部1.From包含用户的Email地址2.User_Agent将用户所用浏…

经典PCB软件比较阐述—Cadence和Mentor(整理)

PCB(Printed Circuit Board)设计软件经过多年的发展、不断地修改和完善,或优存劣汰、或收购兼并、或强强联合,现在只剩下Cadence和Mentor两家公司独大。 Cadence公司的推出的SPB(Silicon Package Board)系列,原理图工具采…

RHEL 集群(RHCS)配置小记 -- 文档记录

1、RHEL 6 集群配置官方管理手册 https://access.redhat.com/site/documentation/zh-CN/Red_Hat_Enterprise_Linux/6/pdf/Cluster_Administration/Red_Hat_Enterprise_Linux-6-Cluster_Administration-zh-CN.pdf 2、官方讲解Fencing设备原理 https://access.redhat.com/documen…

Http协议(5)—HTTP摘要认证

一、摘要认证的改进1.用摘要保护密码客户端不发送密码,而是发送一个摘要,服务端只需验证这个摘要是否和密码相匹配2.单向摘要a.摘要是一种单向函数,将无限的输入值转化为有限的b.常见的摘要为MD5:将任意长度的字节序列转换为一个128位的摘要;MD5的128位摘…

c#常用正则表达式

public class RegexUtil {private RegexUtil() { }private static RegexUtil instance null;/// <summary>/// 静态实例化单体模式/// 保证应用程序操作某一全局对象&#xff0c;让其保持一致而产生的对象/// </summary>/// <returns></returns>publi…

Http协议(4)—HTTP认证机制

一、认证1.HTTP质询/响应认证框架服务器收到一条请求并没有按照请求执行动作,而是以一个认证质询执行响应,要求用户提供一个保密信息说明他是谁,当用户再次发送请求时要附上保密证书,如果证书匹配则执行请求,否则返回一条错误信息2.认证协议与首部官方的两个认证协议:基本认证、…

C#加密解密DES字符串转

using System; using System.Collections.Generic; using System.Text; using System.Security.Cryptography; using System.IO;namespace Component {public class Security{public Security(){ }//默认密钥向量private static byte[] Keys { 0x12, 0x34, 0x56, 0x78, 0x90, …

Http协议(6)—安全HTTP

一、保护HTTP的安全1.功能:.服务器认证:客户端知道它是在与真正的服务器进行通信.客户端认证:服务器知道它是在与真正的客户端进行通信.完整性:服务器与客户端的数据不会被修改.加密:客户端与服务器的对话是私密的,不会被窃听.效率:运行足够快的算法.普适性:所有客户端和服务器…

restful处理

重写/覆盖 HTTP 方法 一些HTTP客户端仅能处理简单的的GET和POST请求&#xff0c;为照顾这些功能有限的客户端&#xff0c;API需要一种方式来重写HTTP方法. 尽管没有一些硬性标准来做这事&#xff0c;但流行的惯例是接受一种叫 X-HTTP的请求头&#xff0c;重写是用一个字符串值…

Http协议(7)—Http缓存

一、冗余的数据传输有些客户端访问服务器页面时,服务器会多次响应同一个页面的副本给客户端&#xff0c;这会产生冗余数据&#xff0c;故使用缓存就可以保留第一条相应的副本&#xff0c;以后就响应缓存的数据二、带宽瓶颈在需要下载大型文件时,如果在局域网中放入该文件的一个…

Apache JMeter--网站自动测试与性能测评

Apache JMeter--网站自动测试与性能测评2013-02-28 15:48:05标签&#xff1a;JmeterFrom:http://bdql.iteye.com/blog/291987 出于学习热情&#xff0c;翻译总结Emily H. Halili的《Apache JMeter》一书的部分内容。 JMeter的简介 可以肯定的是&#xff0c;JMeter至少符合以下几…

Linux 重命名文件

inux下重命名文件或文件夹的命令mv既可以重命名&#xff0c;又可以移动文件或文件夹. 例子&#xff1a;将目录A重命名为B mv A B 例子&#xff1a;将/a目录移动到/b下&#xff0c;并重命名为c mv /a /b/c 其实在文本模式中要重命名文件或目录的话也是很简单的&#xff0c;我们只…

苦逼的.net程序员, 转行高富帅iOS移动开发

先知先觉,后知后觉 **- 在做了两三年.net开发后, 还是感觉.net不是那么牛逼, 许多给我一起搞.net的同学, 不是去做了android, 就是去做了iOS, 或者java; 这让我对.net的前景有了一些动摇, 在三思考之后,还是决定放弃.net ,理由很简单,就是工资有点低; 由于蓝鸥iOS培训机构,一…

C# DataTable的詳細使用方法

在项目中经经常使用到DataTable,假设DataTable使用得当&#xff0c;不仅能使程序简洁有用&#xff0c;并且可以提高性能&#xff0c;达到事半功倍的效果&#xff0c;现对DataTable的使用技巧进行一下总结。 一、DataTable简单介绍 (1)构造函数 DataTable() 不…

mysql设置环境变量

-- 设置或修改系统日志有效期SET GLOBAL expire_logs_days8;SHOW VARIABLES LIKE %expire_logs_days%;-- 设置或修改系统最大连接数SET GLOBAL max_connections 2648;SHOW VARIABLES LIKE %max_connections%;-- 修改MYSQL自动编号步长SHOW VARIABLES LIKE %auto_increment%;SE…

CentOS7 编译安装LVS 互为主备 (实测 笔记 Centos 7.0 + ipvsadm 1.27 + keepalived 1.2.15 )

环境&#xff1a; 系统硬件&#xff1a;vmware vsphere (CPU&#xff1a;2*4核&#xff0c;内存2G&#xff0c;双网卡) LVS服务器&#xff08;两台&#xff09;&#xff1a; 系统&#xff1a;Centos7.0 64位&#xff08;LVSkeepalived&#xff09; LvsMaster:192.168.1.21 (主…

shell 执行mysql语句

<pre name"code" class"plain">#变量定义 sqlname"test.sql" dir"/sdb2/backup/mysql_db_backup/backup/databases" host"127.0.0.1" user"root" passwd"root" dbname"test" #导…

hdu3081 Marriage Match II(最大流)

转载请注明出处&#xff1a; http://www.cnblogs.com/fraud/ ——by fraud Marriage Match II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2410 Accepted Submission(s): 820 Problem Descriptio…

CentOS6安装tomcat6

首先我们要下载一个tomcat的安装包 http://ftp.riken.jp/net/apache/ wget http://ftp.riken.jp/net/apache/tomcat/tomcat-6/v6.0.41/src/apache-tomcat-6.0.41.tar.gz 下载好后解压到一个以目录&#xff0c;我的是放在了/usr/apache-tomcat-6.0.41 tar –zxvf apache-t…