1

我正在用 C# 编写一些代码来从 Web 服务器下载文件。

我正在测试一些支持“字节范围”请求的链接,所以不确定不受支持的服务器会发生什么。

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("someUrl");
request.AddRange(someValue);

如您所见,没有什么特别的。从服务器获得响应后,它开始下载文件。我知道不支持字节范围的服务器将返回状态码 200 而不是 206。所以,在这种情况下,我很好奇我是否必须在没有字节范围请求的情况下重试。

我希望我不必这样做,因为在某些情况下,例如 google drive 链接,关闭响应并获得另一个响应需要太长时间。如果服务器不支持字节范围,那么我真的不介意从头开始下载。这会在没有编码的情况下自动发生吗?

4

1 回答 1

1

所以,在那种情况下,我很好奇我是否必须在没有字节范围请求的情况下再次重试

不,如果服务器不支持字节范围,它只会将整个流发送回客户端。就好像RangeHTTP 请求标头不存在一样。所以基本上当你在客户端读取响应流时,你会得到整个文件。

因此,如果您检测到包含字节范围的请求的 200 状态代码(与 206 部分内容相反),您不应该费心发送额外的范围请求,因为服务器已经将整个文件发送给您。

顺便说一句,为了检测服务器是否支持远程下载,您可能会考虑发送初始HEAD请求以确定功能。

于 2016-01-05T14:22:18.290 回答