【问题标题】:HttpWebRequest AddRange() with an unsupported Server带有不受支持的服务器的 HttpWebRequest AddRange()
【发布时间】:2016-01-05 14:18:48
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 如果服务器不支持字节范围,它将忽略它并发送完整的文件
  • @Gusman 哦,真的吗?服务器忽略它?谢谢!!!

标签: c# httpwebrequest webrequest addrange


【解决方案1】:

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

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

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

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

【讨论】:

  • 我是这么认为的,但不能确定,谢谢!!并感谢提示!
  • 我能再问一个问题吗?某些服务器在响应标头中返回 206 状态代码和“Content-Range”的值。但我无法从标题中找到“Accept-Ranges: bytes”。那么这是否意味着服务器支持远程下载?
  • 是和不是。你不能确定。这意味着服务器违反了协议。通常Accept-Ranges: bytes 标头应该出现在响应中。但是它不存在并且Content-Range 标头存在的事实可能意味着服务器支持远程下载。
猜你喜欢
  • 1970-01-01
  • 2019-11-26
  • 2015-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多