3

我目前正在升级我们以前的 webdav 实施以使用 IT-HIT。

在这个过程中,我注意到文件的读取操作可以请求整个文件或其中的一部分。我想知道是否有办法强制要求始终请求整个文件。我们的 webdav 处理小文件,没有太多需要。

我问是因为在我使用的文档中(Java 客户端版本 3.2.2420 )我认为它只为写操作指定它。

谢谢你的帮助。

4

1 回答 1

6

读取操作是一个 HTTP GET 请求,它可以包含一个 Range 标头。WebDAV 客户端以及任何其他客户端(如 Web 浏览器)都可以利用 GET 请求来读取和下载文件内容。作为 GET 请求的一部分,他们可以附加 Range 标头,指定他们想要获取的文件内容的哪一部分。例如,当您暂停然后恢复下载或下载中断然后恢复时,可以由客户端指定 Range 请求:

GET https://webdavserv/file.ext 
Range: bytes=12345-45678

为了测试服务器是否支持 Range 标头,客户端应用可以发送 HEAD 请求。如果服务器响应包含 Accept-Ranges: bytes 标头,则支持 Range 标头:

HEAD https://webdavserv/file.ext 
...
Accept-Ranges: bytes

所以解决方案是从 HEAD 响应中删除 Accept-Ranges 标头。如果客户端可以正确处理 Accept-Ranges 标头的缺失,它将始终请求整个文件。

如果您不能直接从代码中删除它,在许多情况下,您可以在发送响应之前从响应中删除或过滤标头。特定的标头删除代码取决于您的服务器(Java、ASP.NET、ASP.NET Core、OWIN 等)。例如对于 ASP.NET,它将如下所示:

protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
{
    HttpContext.Current.Response.Headers.Remove("Accept-Ranges");
}

对于 Java,您需要创建一个过滤器:如何删除 HTTP 响应标头?

于 2021-05-15T14:03:01.927 回答