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协议(3)—HTTP实体和编码相关推荐

  1. js html转为实体,字符串js编码转换成实体html编码的方法(防范XSS攻击)

    js代码在html页面中转换成实体html编码的方法一: js代码转换成实体html js代码转换成实体html--红 function test(){ alert('测试红') } test(); ...

  2. HTTP协议压缩格式和URL编码介绍

    HTTP压缩是指web服务器和浏览器之间压缩传输请求响应结果的方法,通过采用通用的压缩算法,将数据包压缩后进行传输,从而提升页面加载速度,给用户一个更好的体验. 1.HTTP压缩过程 数据包压缩的过程 ...

  3. MPHY协议解读三:8b10b编码

    目录 整体概述 8b10b编码优劣势 8b10b实现原理 8b10b符号和术语 3b4b/5b6b编码 RD MPHY实现相关点 整体概述 8b10b编码思维导图如下: 本章节主要分析MPHY协议中使 ...

  4. html实体编码 在线,HTML实体字符编码集(10页)-原创力文档

    \o "HTML实体字符编码集" HTML实体字符编码集 经常我们会使用到一些特殊字符在WEB页面上的引用方式,比如空格我们通常使用" ",其实所有的字符都具有 ...

  5. http协议中content-length 以及chunked编码分析

    转载请注明出处 http://blog.csdn.net/yankai0219/article/details/8269922 0.序 1.http/1.1协议中与chunked编码的相关字段 1)E ...

  6. 《HTTP 权威指南》笔记:第十五章 实体与编码

     如果把 「HTTP 报文」想象为因特网货运系统的「箱子」,那么「HTTP 实体」就是报文中的实际的「货物」. 其中,实体又包含了「实体首部」 和 「实体主体」,实体首部用于描述各种参数,实体主体就 ...

  7. 编码器 协议不公开_公开编码的3种后果

    编码器 协议不公开 我不知道你上周干了什么. 我找不到我想要的. 但是,如果您对此感到好奇,那么您可以准确地找到我周一至周五的工作. 例如,在2016年8月31日,我对Response Commerc ...

  8. HTML实体的编码和解码

    <script type="text/javascript"> //编码:document.getElementById("test").inner ...

  9. http协议解决粘包拆包半包 的编码解码过程、 以及netty 使用http协议的原理

    本文主要介绍netty对http协议解析原理,着重讲解keep-alive,gzip,truncked等机制,详细描述了netty如何实现对http解析的高性能. 1 http协议 1.1 描述 标示 ...

最新文章

  1. 使用 Gitee 进行代码管理(包括本地仓库如何同时关联Git和Gitee)
  2. 使用open flash chart的BarGlass时遇到的问题
  3. 展示使用 boost bind 和 phoenix 处理删除的不同方法的测试程序
  4. linux多线程求和_linux 多线程信号处理总结
  5. 排名前15位的Kubernetes监控和安全工具
  6. c++的STL中的map(哈希表)与unordered_map
  7. Nginx的client_header_buffer_size和large_client_header_buffers学习
  8. 03 聚类算法 - K-means聚类
  9. Java开发之I/O读取文件实例详解
  10. 使用Visual Studio 2010打造C语言编译器
  11. 浅谈大数据广告下个人隐私保护,开发者视角的广告原理
  12. 【自制编译器】(一)
  13. 内存管理(二) - MRC关键字解读
  14. 中职计算机英语教学设计,中职英语教学设计三篇
  15. 2022年湖南省基金从业资格(证券投资基金基础知识)练习题及答案
  16. 基于Android Q电池服务分析
  17. isco 的六种模式(cisco 系统)
  18. 数字化转型时代,如何让你的 App 摆脱“内卷”?
  19. 【HTML】HTML网页设计-----中国戏曲--川剧网页介绍
  20. 3dmax第二次安装遇到的问题及解决方案

热门文章

  1. 四六级php,详解四六级查询API+网页
  2. php实现上传,PHP实现文件上传例子
  3. matlab 配置mex 识别vs2015
  4. python 随机字符串_python生成随机数、随机字符串
  5. ALGO-162——Airport Configuration
  6. 织梦dedecms默认网站地图sitemap.html优化
  7. 图片安全保护(未启动)
  8. 用 PS 调整服务器时间
  9. 全国计算机等级考试题库二级C操作题100套(第75套)
  10. 内存四区(代码区 静态区 栈区 堆区)