我目前正在升级以前的webdav实施,以使用IT-HIT。
在此过程中,我注意到文件的读取操作可以请求整个文件或文件的一部分。我想知道是否有一种方法可以强制始终请求整个文件。我们的webdav处理小文件,对此没有太多需求。
我之所以问是因为在我正在使用的文档(Java客户端版本3.2.2420)中,我认为它仅针对写操作进行指定。
感谢您的帮助。
答案 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?