HTTP下载原理.pdf_第1页
HTTP下载原理.pdf_第2页
HTTP下载原理.pdf_第3页
HTTP下载原理.pdf_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

HTTP 下载原理 对于 HTTP 协议 向服务器请求某个文件时 只要发送类似如下的请求即可 GET Path FileName HTTP 1 0 Host 80 Accept User Agent GeneralDownloadApplication Connection close 每行用一个 回车换行 分隔 末尾再追加一个 回车换行 作为整个请求的结束 第一行中的 GET 是 HTTP 协议支持的方法之一 方法名是大小写敏感的 HTTP 协议还支持 OPTIONS HAED POST PUT DELETE TRACE CONNECT 等方法 而GET 和HEAD 这两个方法通常被 认为是 安全的 也就是说任何实现了 HTTP 协议的服务器程序都会实现这两个方法 对于文件下载功能 GET 足矣 GET 后面是一个空格 其后紧跟的是要下载的文件从 WEB 服务器根开始的绝对路径 该路径后 又有一个空格 然后是协议名称及协议版本 除第一行以外 其余行都是 HTTP 头的字段部分 Host 字段 表示主机名和端口号 如果端口号是默认的80 则可以不写 Accept 字段中的 表示接收任何类型的数据 User Agent 表示用户代理 这个字段可有可无 但强烈建议加上 因为它是服务器统计 追踪以及识别客 户端的依据 Connection 字段中的 close 表示使用非持久连接 关于 HTTP 协议更多的细节可以参考 RFC2616 HTTP 1 1 因为我只是想通过HTTP 协议实现文件下载 所以也只看了一部分 并没有看全 如果服务器成功收到该请求 并且没有出现任何错误 则会返回类似下面的数据 HTTP 1 0 200 OK Content Length 13057672 Content Type application octet stream Last Modified Wed 10 Oct 2005 00 56 34 GMT Accept Ranges bytes ETag 2f38a6cac7cec51 160c Server Microsoft IIS 6 0 X Powered By ASP NET Date Wed 16 Nov 2005 01 57 54 GMT Connection close 不用逐一解释 很多东西一看几乎就明白了 只说我们大家都关心内容吧 第一行是协议名称及版本号 空格后面会有一个三位数的数字 是 HTTP 协议的响应状态码 200 表示成 功 OK 是对状态码的简短文字描述 状态码共有 5类 1xx属于通知类 2xx 属于成功类 3xx属于重定向 类 4xx 属于客户端错误类 5xx 属于服务端错误类 对于状态码 相信大家对 404应该很熟悉 如果向一 个服务器请求一个不存在的文件 就会得到该错误 通常浏览器也会显示类似 HTTP 404 未找到文件 这 样的错误 Content Length 字段是一个比较重要的字段 它标明了服务器返回数据的长度 这个长度是不包 含 HTTP 头长度的 换句话说 我们的请求中并没有 Range 字段 后面会说到 表示我们请求的是整个 文件 所以Content Length 就是整个文件的大小 其余各字段是一些关于文件和服务器的属性信息 这段返回数据同样是以最后一行的结束标志 回车换行 和一个额外的回车换行作为结束 即 r n r n 而 r n r n 后面紧接的就是文件的内容了 这样我们就可以找到 r n r n 并从它后面的第一个字节开始 源源不断的读取 再写到文件中了 以上就是通过 HTTP 协议实现文件下载的全过程 但还不能实现断点续传 而实际上断点续传的实现非常 简单 只要在请求中加一个Range 字段就可以了 假如一个文件有1000 个字节 那么其范围就是0 999 则 Range bytes 500 999 表示读取该文件的500 999 字节 共500 字节 Range bytes 500 599 表示读取 该文件的 500 599 字节 共 100 字节 Range 还有其它几种写法 但上面这两种是最常用的 对于断点续 传也足矣了 如果HTTP 请求中包含 Range 字段 那么服务器会返回 206 Partial Content 同时 HTTP 头 中也会有一个相应的Content Range 字段 类似下面的格式 Content Range bytes 500 999 1000 Content Range 字段说明服务器返回了文件的某个范围及文件的总长度 这时 Content Length 字段就不是整 个文件的大小了 而是对应文件这个范围的字节数 这一点一定要注意 一切好像基本上没有什么问题了 本来我也是这么认为的 但事实并非如此 如果我们请求的文件的 URL 是类似 这样的文件 则不会有问题 但是很多软件下载网站的文件下载 链接都是通过程序重定向的 比如pchome 的ACDSee 的 HTTP 下载地址是 sid 5547 define BUFFSIZE 2048 void main 初始化Socket函数库 WSADATAwsaData if WSAStartup MAKEWORD 2 0 struct protoent ppe ppe getprotobyname tcp 创建SOCKEt对象 SOCKET sock socket PF INET SOCK STREAM ppe p proto if sock INVALID SOCKET return 根据主机名获得IP地址 hostent pHostEnt gethostbyname if pHostEnt NULL return int nTime 10000 setsockopt sock SOL SOCKET SO SNDTIMEO char setsockopt sock SOL SOCKET SO RCVTIMEO char 连接 struct in addr ip addr memcpy haddr list 0 里4个字节 每个字节8位 struct sockaddr in destaddr memset void destaddr sin family AF INET destaddr sin port htons 80 destaddr sin addr ip addr if 0 connect sock struct sockaddr 格式化请求 各字段含义参见HTTP协议RFC2616 char request GET HTTP 1 1 r n Host r n Accept r n User Agent Mozilla 4 0 compatible MSIE 5 00 Windows 98 r n Connection Close r n r n 发送请求 if SOCKET ERROR send sock request strlen request 0 return 接收网页信息并存储 int rcv bytes 0 char buf BUFFSIZE 0 ofstream ofs out txt ios binary ios out ios trunc rcv bytes recv sock b

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论