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,一经查实,立即删除!

相关文章

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

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

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

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

Http协议(6)—安全HTTP

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

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

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

hdu3081 Marriage Match II(最大流)

转载请注明出处: 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…

log4net 日志框架的配置

log4net 日志框架的简单配置 添加对log4net程序集的引用 选择程序集文件添加引用即可,需要注意的是需要添加相应程序版本的程序集,如果你的应用是基于.netFramework2.0,则应选择net 2.0版本的程序集 修改配置文件,配置log4net相…

CSS 设计指南(第3版) 初读笔记

第1章 HTML标记与文档结构 关于<title>标签&#xff1a;搜索引擎会给<title>标签中的文字内容赋予很高的权重。而且这些文字也会作为网页标题出现在搜索结果列表中。 无论你想了解哪个HTML元素&#xff0c;第一个要问的问题都应该是&#xff1a;它是块元素&#xf…

Objective-C中的@property和@synthesize用法

代表“Objective-C”的标志&#xff0c;证明您正在使用Objective-C语言 Objective-C语言关键词&#xff0c;property与synthesize配对使用。 功能&#xff1a;让编译好器自动编写一个与数据成员同名的方法声明来省去读写方法的声明。 如&#xff1a; 1、在头文件中&#xff1a;…

Android用户界面程序设计示例

[例1]按钮和Toast弹出对话框 1 [例2] TextView文本框 &#xff08;1&#xff09; 3 [例3]TextView文本框 &#xff08;2&#xff09; 4 [例4]编辑框EditText 4 [例5]单选RadioButton 6 [例6]Toast的用法简介 8 [例7]多选checkbox 12 [例8]菜单Menu 14 …

Spring Thread Pool 线程池的应用

Spring and Java Thread example 扫扫关注“茶爸爸”微信公众号坚持最初的执着&#xff0c;从不曾有半点懈怠&#xff0c;为优秀而努力&#xff0c;为证明自己而活。Download it – Spring-Thread-Example.zip (22 KB)转自&#xff1a;http://www.mkyong.com/spring/spring-and…

Emule使用Upnp,解决Lowid和port not reachable的问题

路由器上钩选开启Upnp Emule->选择->扩展选项->Upnp&#xff0c; 服务器&#xff1a;【从URL更新】http://upd.emule-security.org/server.met转载于:https://www.cnblogs.com/zhyong/p/4422139.html

Android动画及滑动事件冲突解决(转载)

原文链接&#xff1a;http://blog.csdn.net/singwhatiwanna/article/details/38168103 Android开发中动画和事件处理是程序员迈向高手的必经之路&#xff0c;也是重点和难点。 此篇转载文章思路清晰&#xff0c;结构合理&#xff0c;用图文混合的方式完美的讲解了动画和事件冲突…

使用临时表解决union和order by不能同时使用的问题

最近遇见了这样一个问题&#xff0c;有4张表&#xff0c;A&#xff08;单据&#xff09;表&#xff0c;B&#xff08;产品&#xff09;表&#xff0c;C&#xff08;产品类型&#xff09;&#xff0c;D&#xff08;单据产品关联表&#xff09;。 B表有唯一对应的类型C&#xff…

2.3线性表的链式存储和运算—双向链表

以上讨论的单链表的结点中只有一个指向其后继结点的指针域next&#xff0c;因此若已知某结点的指针为p&#xff0c;其后继结点的指针则为p->next &#xff0c;而找其前驱则只能从该链表的头指针开始&#xff0c;顺着各结点的next 域进行&#xff0c;也就是说找后继的时间性能…

通过栈(Stack)实现对树的遍历

说到数的遍历树&#xff0c;长期以来的第一印象都是通过递归去实现。然而今天看了某位前辈的代码&#xff0c;才发现使用栈去实现遍历是那么简单。理论上通过数组也是可以实现同等功能的&#xff0c;毕竟Stack也是通过数据去实现的。 package com.sysway.ui.widget;import jav…

StroyBoard中UICollectionView中添加Header和footer

到Storyboard中&#xff0c;选择collection view controller中的"Collection View"。在Attributes inspector中&#xff0c;选择"Section Header"和"Section Footer",一旦选中你就会在屏幕中看到下面的的显示&#xff1a; 最重要的是&#xff0c…

树形结构数据汇总查询解决方案+优化求助

最近遇到一个地区数据汇总的问题&#xff0c;地区下的地址呈树形结构&#xff0c;&#xff08;简化结构&#xff09;如A市下有B、C区&#xff0c;B区下有D、E街道。先要查询所有地区的人数&#xff08;包括子区域&#xff09;&#xff0c;如A的人数直属A的人数B的人数C的人数D的…

Dom4j 学习笔记

dom4j 是一种解析 XML 文档的开放源代码 XML 框架。dom4j下载地址 本文主要记载了一些简单的使用方法。 一、xml文件的解析 dom4j既可以解析普通的xml文件&#xff0c;也可以解析一个InputStream&#xff0c;先看看xml文件长什么样子&#xff1a; <books><book>&l…

交叉连接(CROSS JOIN)的实际应用

一次偶然的机会&#xff0c;使用到了万年不用的交叉连接&#xff08;CROSS JOIN&#xff09; 业务场景如下&#xff1a; 1、存在多个运营商&#xff0c;每个运营商下面都有各种类型的设备&#xff0c;不同运营商的设备不完全相同&#xff1b; 2、任何设备有且仅有两种用途‘…

C# xml文件读取与修改

c#读写xml文件已知有一个XML文件&#xff08;bookstore.xml&#xff09;如下&#xff1a; Code<?xml version"1.0" encoding"gb2312"?><bookstore> <book genre"fantasy" ISBN"2-3631-4"> <title>Obero…