琢磨HTTP协议的每一个细节。

HTTP协议博大精深,每一个细节都应细细体会。

否则,在协议还原的过程中,你会遇到各种问题。

今天,本文中将对HTTP协议的Range和Content-Range进行分析。

Range和Content-Range是 HTTP/1.1中新增的HTTP头字段。它用于从服务器中获取一个大文件的某一部分内容,这极大地提高了HTTP的运行效率,很适合下载软件进行多线程下载和断点续传。

一个典型使用Range字段的HTTP会话如下:

在请求头部,使用“Range”字段描述了需要请求的内容起止:

Range: bytes=0-204799

可以看出,对数据内容,它是以字节来计数的,并且其字节的序号是以0开始的。

在响应头部,使用“Content-Range”字段描述了返回的数据内容的起止位置以及整个需要请求的内容的长度:

Content-Range: bytes 0-169704/169705

在字段中,以“/”为分隔,前半部分描述的是当前传输的内容的起止,后半部分为整个需要请求的内容的长度。本文的例子中,整个需要请求内容长度为169705字节,因此返回的数据要比请求头部描述的数据要少。

对含“Range”字段的HTTP数据,其响应码并非通常的200等,而是206和416。206的含义是“Partial Content”,即服务器发回的是请求的那一部分内容。416的含义是“Range Not Satisfiable”,表明客户端请求的数据范围不合法。

在协议还原中,对HTTP协议本身而言,处理Range并不复杂。复杂的是如果需要还原的是一个文件,会涉及到多个HTTP会话间的同步和协作,这需要大家谨慎处理。

对HTTP的还原,如果有一些心得体会,请联系我分享哦。

长按进行关注。

HTTP协议中的Range和Content-Range的更多相关文章

  1. SQLSERVER中的ALLOCATION SCAN和RANGE SCAN

    SQLSERVER中的ALLOCATION SCAN和RANGE SCAN 写这篇文章的开始,我还不知道ALLOCATION SCAN的工作原理是怎样的,网上资料少得可怜 求助了园子里的某位大侠,他看 ...

  2. HTTP协议中状态码的应用

    HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码. 所有状态码的第一个数字代表了响应的五种状态之一.   Mark from 维基百科     消息 ...

  3. Http协议中关于Content-Length的解读【出现坑爹的视频中断】

    最近公司的视频设备在下载视频的时候,出现了很诡异的现象,在新旧服务器一样的tpp包,下载下来后,新服务器无法解析,旧服务器没问题.且tpp包并没有改动. 后面找了挺久,终于发现了视频下载的时候是断点续 ...

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

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

  5. http协议中的一些小常识

    http协议这部分的知识很重要,在面试的时候也会经常问起来. 先来看一看什么是http协议:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一 ...

  6. HTTP协议中的报文格式

    按照传输过程,HTTP 报文分为请求报文和响应报文.请求报文和响应报文的结构差不多,这里只对 HTTP 请求报文做一个总结.HTTP 请求报文由 请求行.请求头.请求体(请求数据).空行 四个部分组成 ...

  7. 转:Http协议中Cookie详细介绍

    Http协议中Cookie详细介绍 Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie.内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了, ...

  8. 理解HTTP协议中的multipart/form-data

    前提 之前在写一个通用HTTP组件的时候遇到过媒体(Media)类型multipart/form-data的封装问题,这篇文章主要简单介绍一下HTTP协议中媒体类型multipart/form-dat ...

  9. PBOC协议中对于所有电子存折/电子钱包应用的预处理

    下图给出了PBOC协议中规定的对电子存折/电子钱包应用的所有交易类型共有的预处理流程 图1 1.1 插入卡片 终端应具有检测IC卡是否已经插入读卡器的功能.如果IC卡已经插入,终端将继续执行1.2的应 ...

  10. http协议中用于上传多个文件的 multipart 字段

    大家好,我是许飞,微软拼音的开发实习生.在网络编程中,经常用到从服务器上“下载”一些数据,有时却要向服务器“上传”数据.曾在一个原型中使用了“multipart/form-data”格式向Web服务器 ...

随机推荐

  1. css 揭秘-读书笔记

    css 揭秘 [希]Lea verou 著 css 魔法 译 该书涵盖7大主题,47个css技巧,是css进阶必备书籍,开阔思路,探寻更优雅的解决方案.这本书完全用css渲染出的html写成的(布局. ...

  2. 【HTML】---常用标签(1)

    Html常用标签(1) 重新整理学习下前端知识从Html标签开始.我们先看HTML 骨架格式: <!DOCTYPE html> <!--这句话就是告诉我们使用哪个html版本--&g ...

  3. GO基础之结构体

    1 .什么是结构体 GO语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型.结构体是由一系列具有相同类型或不同类型的数据构成的数据集合. 2.什么是实例化? Go结构体的 ...

  4. JS基础语法---(数据)简单类型和复杂类型

    原始数据类型: number, string, boolean, undefined, null, object 基本类型(简单类型), 即值类型: number, string, boolean 复 ...

  5. Java - IO 扫描流:Scanner

    IO_扫描流:Scanner 在改进输出功能不足方面提供了打印流(PrintSream):利用BufferedReader类(缓冲输入流)解决了大文本数据的输入和读取操作,但是BufferedRead ...

  6. Java反射02 : Class对象获取的三种方式和通过反射实例化对象的两种方式

    1.Class对象获取的三种方式 本文转载自:https://blog.csdn.net/hanchao5272/article/details/79361463 上一章节已经说过,一般情况下,Jav ...

  7. iOS 为何使用runtime方法交换多次后却能按照交换顺序依次执行代码逻辑?

    题目: 假设我们有一个ViewController, Category A(ViewController), Category B(ViewController), Category C(ViewCo ...

  8. Centos7 下安装python3及卸载

    一.安装python3 1.安装依赖包 yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel read ...

  9. luoguP1020 导弹拦截

    题意 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国 ...

  10. layUI学习第五日:layUI布局系列二

    6.列偏移 列偏移可针对不同屏幕的标准进行设定,只会在桌面屏幕下有效,当低于桌面屏幕的规定的临界值,就会堆叠排列. <div class="layui-col-md4 layui-co ...