导航:首页 > IDC知识 > 服务器http断点续传

服务器http断点续传

发布时间:2020-10-29 16:26:40

1、如何利用http协议实现文件下载的断点续传?

http协议中 header里面有个字段叫做range,以及与range相关的一些header
Range: 只请求实体的一部分,指定范围 例如Range: bytes=500-999
所以断点续专传,属你懂的,断了之后你再请求剩下的部分,最后拼起来就行

2、Http下载问题.断点续传问题

http下载是不太稳定的,建议选择在网络不忙的时候再下载,也可能是链接上面有问题。

另外可以版检查一下是权不是里面有病毒,有的时候杀毒软件或者防火墙的实时监控可能会导致那个“重置”问题。

如果你监视网络状态的时候出现了超时,有可能是网络设备不太稳定导致的,即暂时性的网络中断。

目标网无法访问和重置的问题也有可能是你下载的服务器设置只允许一个线程连接,当使用了第二个线程的时候就会出现这种情况。

总之,建议检查一下网络连接的稳定性,还有相关的软件影响。另外是否打开了浏览器的多线程下载功能也要检查。ie8是支持多线程下载的。

不过个人认为你还是网络的稳定性有关系。当然,有空的话把C盘里的IE缓存清一下也可能会有帮助。

3、CHttpFile怎么实现断点续传?

其实断点续传的原理很简单,就是在Http的请求上和一般的下载有所不同而已。 打个比方,浏览器请求服务器上的一个文时,所发出的请求如下: 假设服务器域名为w www.sjtu.e.cn,文件名为down.zip。 GET /down.zip HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms- excel, application/msword, application/vnd.ms-powerpoint, */* Accept-Language: zh-cn Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) Connection: Keep-Alive 服务器收到请求后,按要求寻找请求的文件,提取文件的信息,然后返回给浏览器,返回信息如下: 200 Content-Length=106786028 Accept-Ranges=bytes Date=Mon, 30 Apr 2001 12:56:11 GMT ETag=W/"02ca57e173c11:95b" Content-Type=application/octet-stream Server=Microsoft-IIS/5.0 Last-Modified=Mon, 30 Apr 2001 12:56:11 GMT 所谓断点续传,也就是要从文件已经下载的地方开始继续下载。所以在客户端浏览器传给 Web服务器的时候要多加一条信息--从哪里开始。 下面是用自己编的一个"浏览器"来传递请求信息给Web服务器,要求从2000070字节开始。 GET /down.zip HTTP/1.0 User-Agent: NetFox RANGE: bytes=2000070- Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 仔细看一下就会发现多了一行RANGE: bytes=2000070- 这一行的意思就是告诉服务器down.zip这个文件从2000070字节开始传,前面的字节不用传了。 服务器收到这个请求以后,返回的信息如下: 206 Content-Length=106786028 Content-Range=bytes 2000070-106786027/106786028 Date=Mon, 30 Apr 2001 12:55:20 GMT ETag=W/"02ca57e173c11:95b" Content-Type=application/octet-stream Server=Microsoft-IIS/5.0 Last-Modified=Mon, 30 Apr 2001 12:55:20 GMT 和前面服务器返回的信息比较一下,就会发现增加了一行: Content-Range=bytes 2000070-106786027/106786028 返回的代码也改为206了,而不再是200了。 知道了以上原理,就可以进行断点续传的编程了。

4、支持断点续传的http服务器一定会送Accept-Ranges头吗

支持断点续传时,客户端每次提交下载请求时,服务端都要添加Accept-Ranges、ETag这两个响应专头,以保证客户端和服务属端将此下载识别为可以断点续传的下载:
Accept-Ranges:告知下载客户端这是一个可以恢复续传的下载,存放本次下载的开始字节位置、文件的字节大小;
ETag:保存文件的唯一标识(我在用的文件名+文件最后修改时间,以便续传请求时对文件进行验证);
Last-Modified:可选响应头,存放服务端文件的最后修改时间,用于验证

5、HTTP1.1本身支持断点续传吗

你要长连接 那就得用Socket

支持不支持是要靠你代码实现的。。。
给你一个思路回:下载一个文件答 你一开始是可以得到文件的字节数组形式的,而下载的那个字节流,你取了多少,也就是说每次取1024个字节,取了100次,也就是0到102400个字节被你下载下来了,那你应该有100次记录了下载的进度,也就是这次获取到哪个数据下标了,那么100次后断了重新下载,你就可以直接从你记录好的第100+1次开始下载,之前的就可以无视掉了~~~

http协议一个特点就是 客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。

6、CHttpFile怎么实现断点续传?

void CUpdateDlg::OnButtonDoupdate()

{

// 读取升级文件

CFileStatus rStatus;

CString szIniData;

CString inFile;

CString tmp;

inFile=m_szPath+"\\update.ini";

CFile UpdateFile;

UpdateFile.Open( inFile, CFile::modeRead);

UpdateFile.GetStatus(inFile,rStatus);

UpdateFile.Read(szIniData.GetBuffer(rStatus.m_size),rStatus.m_size);

UpdateFile.Close();

CStringArray arType;

CStringArray arVersion;

for(int i=1;i<=27;i+=2){

AfxExtractSubString(tmp,szIniData,i,'\n');

tmp.TrimRight();

tmp.TrimRight();

arType.Add(tmp);

}

for(int j=2;j<=28;j+=2){

AfxExtractSubString(tmp,szIniData,j,'\n');

tmp.TrimRight();

tmp.TrimRight();

arVersion.Add(tmp);

}

GetDlgItem(IDC_BUTTON_DOUPDATE)->EnableWindow(FALSE);

CProgressCtrl* pBar = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS_UPDATE);

pBar->SetPos(5);

m_szEditMessage = "\r\n取得网络升级地址\r\n"+ServerUrl;

UpdateData(FALSE);

CInternetSession mySession(NULL,0);

CHttpFile* myHttpFile=NULL;

BOOL bIsNewer = FALSE;

CString myData;

CString myUrl;

CString m_SiteRec;

myUrl = ServerUrl+"?pro=update";

myHttpFile=(CHttpFile*)mySession.OpenURL(myUrl);

while(myHttpFile->ReadString(myData)){m_SiteRec = myData;}

myHttpFile->Close();

mySession.Close();

if(m_SiteRec=="ok"){

pBar->SetPos(10);

m_szEditMessage = "\r\n已经连通......\r\n"+m_szEditMessage;

UpdateData(FALSE);

for(int k=0;k<14;k++){

CInternetSession mySession(NULL,0);

CHttpFile* myHttpFile=NULL;

m_SiteRec.Empty();

myUrl = ServerUrl+"?pro=update&mole="+arType[k]+"&version="+arVersion[k];

myHttpFile=(CHttpFile*)mySession.OpenURL(myUrl);

while(myHttpFile->ReadString(myData)){m_SiteRec += myData;}

if(m_SiteRec != "ok"){

CString

inFile;

inFile=m_szPath+"\\data\\"+arType[k];

CFile NetFile;

NetFile.Open( inFile, CFile::modeCreate | CFile::modeWrite);

NetFile.Write( m_SiteRec, m_SiteRec.GetLength());

NetFile.Close();

bIsNewer = TRUE;

}

pBar->SetPos((k+1)*(100-10)+10);

m_szEditMessage = "\r\n检查"+arType[k]+"文件...

成功!\r\n"+m_szEditMessage;

UpdateData(FALSE);

myHttpFile->Close();

mySession.Close();

}

if(bIsNewer){

::MessageBox(NULL,"文件已经更新成功!",NULL,MB_ICONASTERISK);

}else{

::MessageBox(NULL,"您的数据文件已经是最新版本了!",NULL,MB_ICONASTERISK);

}

}else{

::MessageBox(NULL,"没有连接网络或者找不到升级服务器,请检查",NULL,MB_ICONASTERISK);

pBar->SetPos(100);

}

// 下面是完成了.

GetDlgItem(IDCANCEL)->ShowWindow(SW_HIDE);

GetDlgItem(IDOK)->ShowWindow(SW_SHOW);

GetDlgItem(IDOK)->SetFocus();

}

7、VB通过API函数如何实现HTTP断点续传下载?

获得 http 标头信息,就可以得到文件的大小
发送标头信息 可以设置 断点续传的内 起点

具体容的 我忘了 很久以前 弄过! 下载 小于2G的文件 速度 很快,不过超过 2G的文件 vb 处理起来需要 字节转换,很麻烦切很容易内存崩溃!

断点续传 最好使用 Winsock 控件 或者直接使用 Winsock 模块(个人感觉使用 模块要好一些,比较稳定)

举个例子:

发送请求下载信息

strTmp="GET 文件网络地址 HTTP/1.1" 回车
StrTmp=strTmp + "Accept: */*" 回车
StrTmp=StrTmp + "Host:主机地址"回测
StrTmp=StrTmp +"Range bytes=续传的起始点-" 回车 如果不加这句话 服务器回返回文件大小

简单的就是这样 不过 这是我印象中的,不过这个定义比较严格 你可以去网上在搜搜!

8、HttpClient支持断点续传吗

支持,在header中定义一个RANGE,标识已上传的位置。
httpget.addHeader("Range", "bytes=500-");
注:服务器端支持断点续传,则返回响应的码版不再是权200,而是206。

9、如何实现基于http协议的断点续传的上传功能

于HTTP 协议的多线程下载和断点续传的实现 学 生:叶升路 指导教师:覃 颖 (三峡大学 电气信息学院) 摘 要:本文介绍了网络下载软件中的最新技术——多线程下载和断点续传技术,同时 也介绍了HTTP 协议的发展、特点以及WinSock 编程技术。最后在这些技术的基础上成 功设计并实现了基于HTTP 协议的具有多线程下载和断点续传功能的下载软件。本软件 的实现代码未使用任何WinInet API 函数如InternetOpen , InternetConnect 等,而是直接 使用WinSock 编程,逐步解析HTTP 协议来完成会话和文件下载等功能。经测试,下载 速度有所提高。 关键词:下载;多线程;断点续传;HTTP;WinSock; Abstract:This paper introces the latest downloading technology called multi-threaded downloading and resume in network downloading software. But also descripes the development of HTTP protocol, characteristics and WinSock programming. Finally, based on these technologies successfully designed and implemented a downloading tool based on the HTTP protocol with multi-threaded and resume features. The realization of the software code does not use any WinInet API functions such as InternetOpen, InternetConnect, etc., but directly use WinSock to programming, and complete the functions of conversation and file downloads and others by parse HTTP protocol steply. After tested, the speed of downloading has increased. Keywords: Downloading;Multi-thread;Resume;HTTP;WinSock; 前言 最近几年,随着计算机网络的飞速发展,因特网(Internet)已经逐渐成为人们生活、 工作、学习必不可缺的一部分。因特网上存储了大量丰富的信息资源,我们可以使用下载 工具,把需要的信息资源下载到本地。但是由于受到各种因素的限制,例如服务器性能、 网络带宽、下载的信息量以及下载工具等等,下载速度受到不同程度的影响。因此人们不 断地提高服务器性能,扩展网络带宽,开发效率更高的下载工具以达到最大化提高下载 速度的目的。 在限制下载速度的众多因素中,研究新的网络下载技术开发出更高效的下载工具无 疑是其中最节约,环保以及方便的方式。网络下载技术,也可以称为网络文件共享技术, 10 1 它一直是网络发展的重要推动力之一。早期人们共享资源的普遍方法是将资源文件上传 至服务器上,然后其他用户可以通过HTTP 或FTP 等协议将其下载到本地电脑。这种模 式称为客户机/服务器模式即C/S 模式,它对服务器的依赖性很大,当下载用户很少时, 比如说一个,他将独享服务器的带宽,很显然其下载速度会非常快。然而当下载的人数 较多而服务器带宽有限时,比如服务器带宽为3MB/S,而下载人数为100 人,则众多下 载用户不得不共享一个带宽(3MB/S)最终结果是下载速度均分(30KB/S),普遍不高。 P2P 技术的出现使得人们终于摆脱了服务器的枷锁。它的主要特点是资源分散、负 载均衡、和非中心化,它将共享的文件存储在各个客户机节点上,用户之间可以直接共 享和传输文件而不需要通过服务器。客户机不再只利用服务器带宽进行下载,它同时也 可以利用其他客户机节点的带宽,这样大大提高了下载速度。 纵观网络下载技术发展的历史,可以将其划分为四个阶段:单线程下载阶段、多线 程下载及断点续传阶段、P2P阶段、P2SP阶段。 一、单线下载时代:应对有限时间流量的办法 早在上个世纪90年代,当时互联网并不普及,很多人使用Modem拨号,通过Telnet 软件连接到拨接式BBS上获取资讯并与别人交流(收发邮件等),由于服务器的电话线 路数量有限,因此都会限制连接时间,一般新注册用户只有10分钟左右。这点时间用来 看帖回帖显然不够的,因此有人就开发了软件,进入BBS后,能够将整个BBS上所有内 容都下载回来,然后可以断线慢慢看慢慢回,最后再次拨入BBS上传回复。 二、断点续传与多线程下载时代:大幅度提高速度 进入Windows与WWW(World Wide Web,互联网)时代之后,IE,Netscape等浏览 器都可以通过点击左键下载,那个时候网络速度最快不过5KB/s,下载一首5MB的MP3 歌曲要15分钟以上!中途万一断线就前功尽弃,于是有人开发了支持断点续传的下载软 件。 世界上第一款支持断点续传的下载软件应该是GetRight。它可让你用浏览器下载文 件时有续传功能,可设定时间来下载文件或是中断Modem拨接,下载完毕时自动中断 Modem拨接或关机。 为了更好的利用带宽,在断点续传的基础上,多线程下载软件逐渐发展了起来。最 早出现的多线程下载软件是中国人开发的NetAnts(网络蚂蚁)。网络蚂蚁其实也是一 个断点续传软件,但它对断点续传功能进行了扩展:可进行多点续传,即利用断点续传 的原理同时建立多个连接下载同一个软件并最终将其合并为一个完整的软件。

10、wininet 判断是否支持HTTP断点续传

在网上找到的:
DWORD dwByteToRead = 0;
DWORD dwSizeOfRq = 4;
HttpQueryInfo(hOpenRequest, HTTP_QUERY_FLAG_NUMBER| HTTP_QUERY_STATUS_CODE ,(LPVOID)&dwByteToRead, &dwSizeOfRq, NULL);
// printf("%d\n",dwByteToRead);
// DWORD dwFileSize1 = (DWORD)_wtol(dwByteToRead); //get the length of received file
// printf("%d\n",dwFileSize1);

////状态码查询!---------注:参数要改成HTTP_QUERY_FLAG_NUMBER| HTTP_QUERY_STATUS_CODE
if (200 == dwByteToRead)
{
printf("支持200 OK响应!\n");
}
else if(206 ==dwByteToRead)
{
printf("支持206 OK响应!\n");
}
请看:
http://hi.baidu.com/vc_net/blog/item/02e795ca050d6f96c81768aa.html

与服务器http断点续传相关的知识