具有不受支持的服务器的 HttpWebRequest AddRange()

HttpWebRequest AddRange() with an unsupported Server

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

我正在测试一些支持 'byte-range' 请求的链接,所以不确定不支持的服务器会发生什么情况。

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

如您所见,没什么特别的。得到服务器响应后,开始下载文件。我知道不支持字节范围的服务器将 return 状态代码 200 而不是 206。因此,在那种情况下,我很好奇是否必须在没有字节范围请求的情况下再次重试。

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

So, in that case, I'm curious if I have to retry without a byte range request again

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

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

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