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

时间:2018-08-07 08:21:23

标签: ithit-webdav-server

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

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

我之所以问是因为在我正在使用的文档(Java客户端版本3.2.2420)中,我认为它仅针对写操作进行指定。

感谢您的帮助。

1 个答案:

答案 0 :(得分: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,您需要创建一个过滤器:How do delete a HTTP response header?