如何强制读取操作始终请求整个文件

Man*_*ull 3 ithit-webdav-server

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

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

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

谢谢你的帮助。

Yar*_*yzh 6

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

GET https://webdavserv/file.ext 
Range: bytes=12345-45678
Run Code Online (Sandbox Code Playgroud)

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

HEAD https://webdavserv/file.ext 
...
Accept-Ranges: bytes
Run Code Online (Sandbox Code Playgroud)

所以解决方案是从 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");
}
Run Code Online (Sandbox Code Playgroud)

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