zz [译]实践HTTP206状态:部分内容和范围请求 https://www.cnblogs.com/ziyunfei/archive/2012/11/18/2775499.html

原文:http://www.cyberciti.biz/cloud-computing/http-status-code-206-commad-line-test/



HTTP 2xx范围内的状态码表明了:"客户端发送的请求已经被服务器接受并且被成功处理了".HTTP/1.1 200 OK是HTTP请求成功后的标准响应,当你在浏览器中打开www.cyberciti.biz后,你通常会得到一个200状态码.HTTP/1.1 206状态码表示的是:"客户端通过发送范围请求头Range抓取到了资源的部分数据".这种请求通常用来:

  1. 学习http头和状态.
  2. 解决网路问题.
  3. 解决大文件下载问题.
  4. 解决CDN和原始HTTP服务器问题.
  5. 使用工具例如lftp,wget,telnet测试断电续传.
  6. 测试将一个大文件分割成多个部分同时下载.

查明远程服务器是否支持HTTP 206

首先你需要知道文件大小以及远程服务器是否支持HTTP 206请求.使用curl命令可以查看任意资源的HTTP头,使用下面的curl命令可以发送一个HEAD请求:

输出结果为:


其中有两个我们比较关注的请求头:

Accept-Ranges: bytes- 该响应头表明服务器支持Range请求,以及服务器所支持的单位是字节(这也是唯一可用的单位).我们还能知道:服务器支持断点续传,以及支持同时下载文件的多个部分,也就是说下载工具可以利用范围请求加速下载该文件.Accept-Ranges: none响应头表示服务器不支持范围请求.

Content-Length: 36907-  Content-Length响应头表明了响应实体的大小,也就是真实的图片文件的大小是36907字节 (37K).

如何发送一个range请求头?

现在,你知道了该图片所在的服务器支持范围请求,你需要发送一个包含Range请求头的GET请求:


完整的请求数据应该是这样的.首先第一行是:


然后需要发送Host请求头来指定请求资源所在的主机和端口号:


最后是要发送的Range请求头,指定了你想要的字节范围:


使用telnet命令

telnet命令允许你使用Telnet协议来与远程主机(服务器)进行通信.所有的类Unix操作系统以及MS-Windows都包含有Telnet客户端.启动Telnet客户端并进入Telnet提示符,要执行命令:


想要通过端口号80连接远程服务器s0.cyberciti.org,输入:


输出结果为:


在本例中,使用范围请求(0-1024 字节)来请求s0.cyberciti.org上的/images/misc/static/2012/11/ifdata-welcome-0.png文件,输入:


输出结果为:

上图中,

  1. 区域1 - GET请求以及请求头.
  2. 区域2 - 206状态以及响应头.
  3. 区域3 - 二进制数据.

使用curl命令

curl命令是一个和远程服务器交换数据的工具.它支持HTTP/FTPSFTP/FILE协议上的范围请求,在下例中,使用两段范围来请求远程文件ifdata-welcome-0.png,然后使用cat命令将两段数据合并成完整文件:


还可以使用-r选项(可以同时添加-v选项查看请求头和响应头):


如何开启Accept-Ranges响应头?

大部分web服务器都原生支持字节范围请求. Apache 2.x用户可以在httpd.conf中尝试mod_headers:


Lighttpd用户尝试在lighttpd.conf中进行下面的配置:


不喜欢命令行?

你可以通过浏览器查看HTTP头.尝试下面的附加组件:

总结

本文讨论了如何查看一个请求的HTTP头和响应状态.你可以利用范围请求来分段下载一个大文件,如果指定的偏移量是有效的,则服务器会返回一个HTTP 206状态码.如果偏移量是无效的,则服务器会返回一个HTTP 416状态码 (请求范围无法满足).

推荐阅读

原文地址:https://www.cnblogs.com/yeyong/p/12073789.html

时间: 2024-08-26 06:47:32

zz [译]实践HTTP206状态:部分内容和范围请求 https://www.cnblogs.com/ziyunfei/archive/2012/11/18/2775499.html的相关文章

Android实践--监测网络状态

Android 监测网络状态 我们在使用Android手机时候,一些APP需要网络环境才能运行,所以手机需要可用的网络,不管是2G.3G或者WIFI,甚至有一些比较耗流量的APP只能在WIFI的环境下运行,或者提供用户自行选择是否只能在WIFI环境下运行,作为用户貌似后者体验更好,那么作为开发者,我们仅仅需要几步就能给用户这种体验. ----------------------------------------------------------------------------------

最佳实践-设计-状态设计

1. 不要状态回溯 一旦出现状态回环就进入关闭状态. 新建一个实体. 获取实体列表里不出现这个. 2. 状态机多个状态进入到一个状态 例子: 取消状态. 背景: 订单状态: 新建 - 开始计费 - 结束行程 - 已完成(支付成功)每个状态都可以进入取消状态. 解决方案: 设置一个取消状态. 新需求, 产品需求: 1. 客服:查看取消的渠道,原因.  2. 乘客端: 开始计费后取消后无法查看相关距离,金额. 新的解决方案: 1. 多个状态法 1. 新建后的取消 2.有费用后的取消 取分别的名字.

最佳实践 - 根据状态操作,这样能避免吃掉异常

背景: 取消订单. 1. 去获取费用可能费用获取不到. 2.关闭账单,可能无法关闭(还未收单) 解决方案: 订单状态. 1. 开始中 2.开始计费 3.完成订单 1.  由于任何状态都可以操作取消. 不状态判断. 直接操作. 对费用不存在的 code 吃掉. 无法关单的code 吃掉. 2. 根据状态来操作. 决定哪几种操作应该选. 如果是开始中. 这个方案还是差,容易搞错.因为每增加一个状态,就要重新考虑一把. 原文地址:https://www.cnblogs.com/fei33423/p/8

Welcome to Swift (苹果官方Swift文档初译与注解三)---11~18页

上述代码中,如果可选值为nil,那么判断条件则为false,而且在{}中的代码将会被忽略,如果可选值不为nil,会将该值逐步运算后赋值给let后面的常量,其中逐步运算过程将依据实际的代码块. Switch 语法支持任何类型数据以及各种比较操作,并不局限在整型. let vegetable = "red pepper" switch vegetable { case "celery": let vegetableComment = "Add some rai

curl 请求https内容,返回空

$ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$api); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//禁止直接显示获取的内容 重要 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //不验证证书下同 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // $json = curl_exec($ch);

HTTP 错误 404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求

问题:HTTP 错误 404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求. 原因:Web 服务器上的请求筛选被配置为拒绝该请求,因为内容长度超过配置的值(IIS 7 默认文件上传大小时30M). 解决:更改asp.net文件上传大小限制 1. 修改IIS的applicationhost.config 文件位置: %windir%/system32/inetsrv/config/applicationhost.config 找到<requestFiltering>

转:IIS请求筛选模块被配置为拒绝超过请求内容长度的请求

HTTP错误404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求,原因是Web服务器上的请求筛选被配置为拒绝该请求,因为内容长度超过配置的值(IIS 7 默认文件上传大小时30M). 解决方法 1. 修改IIS的applicationhost.config a.文件位置: %windir%/system32/inetsrv/config/applicationhost.config b.找到 <requestFiltering> 节点 c.为这个节点添加如下元素

asp.net上传大文件-请求筛选模块被配置为拒绝超过请求内容长度的请求

HTTP错误404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求,原因是Web服务器上的请求筛选被配置为拒绝该请求,因为内容长度超过配置的值(IIS 7 默认文件上传大小时30M). 要解决方法即是更改ASP.NET文件上传大小限制: 1. 修改IIS的applicationhost.config 文件位置: %windir%/system32/inetsrv/config/applicationhost.config 找到<requestFiltering>节

IIS请求筛选模块被配置为拒绝超过请求内容长度的请求

HTTP错误404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求,原因是Web服务器上的请求筛选被配置为拒绝该请求,因为内容长度超过配置的值(IIS 7 默认文件上传大小时30M). 解决方法 1. 修改IIS的applicationhost.config a.文件位置: %windir%/system32/inetsrv/config/applicationhost.config b.找到 <requestFiltering> 节点 c.为这个节点添加如下元素