HttpWebRequest或WebRequest - 恢复下载ASP.NET

12

我想知道如何确定服务器是否支持断点续传功能,并且如果支持,如何发送请求以恢复下载进程?

我正在寻找一种解决方案,让我的ASP.NET页面从服务器向我的电脑下载文件,就像“rapidleech”所做的那样,但我想确认我请求下载的服务器是否支持断点续传功能。

2个回答

28

通过使用 Range HTTP 头指定要下载的文件的字节范围即可恢复文件的下载。在 .NET 中,可以使用 HttpWebRequest.AddRange 函数实现此操作。

例如:

request.AddRange(1000); 

将告知服务器从文件的第1000个字节开始发送。

如果服务器支持Range头,则会使用HTTP状态206(部分内容)而不是正常的200(OK)发送内容。请参见HTTP规范

在尝试下载之前检查服务器是否支持恢复,请更改 HttpWebRequest Method 为“HEAD”。如果服务器支持恢复,则会返回206(部分内容),如果不支持,则返回200(OK)。


那么,如果服务器不支持,它会发送普通的200吗? - Cleiton
是的。根据HTTP规范,如果服务器不支持范围请求,它将发送一个正常的200状态码,并返回所有内容。您还可以在初始下载尝试时检查服务器在“Accept-Ranges”头部中指定的内容,以确定它是否支持发送范围请求(应该是“bytes”或“none”)。这个头部不是必需的,所以如果没有“Accept-Ranges”头部,可能会接受范围请求。 - Adam Hughes

2

您可以在这里找到有关特定范围请求的更多信息,Scott Mitchell提供了相关内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接