Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么默认Windows WebDAV客户端忽略403禁止响应?_Windows_Webdav_Windows Explorer_Sabredav - Fatal编程技术网

为什么默认Windows WebDAV客户端忽略403禁止响应?

为什么默认Windows WebDAV客户端忽略403禁止响应?,windows,webdav,windows-explorer,sabredav,Windows,Webdav,Windows Explorer,Sabredav,我正在为我的项目使用sabre/dav库,在阻止默认Windows WebDAV客户端“删除”不应删除的文件方面遇到了一些困难。 服务器部分的实现正常,其他客户端(Finder、CyberDuck)会抛出并确认禁止状态,这些客户端会中止删除过程,并向用户发出禁止错误。Windows客户端会返回相同的状态,但它似乎只是“删除”了服务器端仍然可用的文件。通过刷新文件夹,这些文件将再次可见。看来Win客户端只是忽略了禁止的响应,实际上删除了文件夹,所以它不再可见 更大的问题是,如果出于某种原因,您决定

我正在为我的项目使用sabre/dav库,在阻止默认Windows WebDAV客户端“删除”不应删除的文件方面遇到了一些困难。 服务器部分的实现正常,其他客户端(Finder、CyberDuck)会抛出并确认禁止状态,这些客户端会中止删除过程,并向用户发出禁止错误。Windows客户端会返回相同的状态,但它似乎只是“删除”了服务器端仍然可用的文件。通过刷新文件夹,这些文件将再次可见。看来Win客户端只是忽略了禁止的响应,实际上删除了文件夹,所以它不再可见

更大的问题是,如果出于某种原因,您决定删除一个文件夹,其中下面有受保护和未受保护的文件/文件夹,它会删除所有未受保护的文件/文件夹,因为它无法确认第一个(或任何)禁止响应。其他WebDAV客户端会检测到这一点并停止删除过程,因此指定的文件夹及其子文件夹/文件不会受到影响

尝试删除文件夹或文件时的禁止响应示例:

HTTP/1.1 403 Forbidden
Server: nginx/1.8.0
Date: Wed, 29 Jul 2015 13:55:11 GMT
Content-Type: application/xml; charset=utf-8
Connection: keep-alive
X-Frame-Options: SAMEORIGIN
X-Powered-By: PHP/5.4.41-1~dotdeb+7.1
X-Sabre-Version: 2.1.3
Vary: Accept-Encoding,User-Agent
Content-Length: 320

<?xml version="1.0" encoding="utf-8"?>
<d:error xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns">
  <s:sabredav-version>2.1.3</s:sabredav-version>
  <s:exception>Sabre\DAV\Exception\Forbidden</s:exception>
  <s:message>Permission denied to delete node</s:message>
</d:error>
HTTP/1.1403禁止
服务器:nginx/1.8.0
日期:2015年7月29日星期三格林尼治标准时间13:55:11
内容类型:application/xml;字符集=utf-8
连接:保持活力
X-Frame-Options:SAMEORIGIN
X-Powered-By:PHP/5.4.41-1~dotdeb+7.1
X-Sabre-Version:2.1.3
更改:接受编码,用户代理
内容长度:320
2.1.3
Sabre\DAV\Exception\Forbidden
删除节点的权限被拒绝
在Win8.1 x86上测试默认Win客户端

知道如何强制Win WebDav客户端检测禁止的响应并终止删除过程吗


谢谢

正如埃弗特所说,我认为你可以绕过房产问题:

这里描述了这一点:


编辑:可以在文件上设置只读标志,但windows资源管理器不会阻止发送删除请求并忽略403状态代码。Windows资源管理器似乎只是一个坏的webdav客户端……

可能会将某些webdav属性发送到Windows,这表明该文件应被视为只读。虽然我不是100%确定这些属性是什么样子的。我已经尝试了webdav规范中的一些属性和方法,但是没有一个能做到这一点。internet上是否有某种文档(隐藏得很好)描述了Windows webDAV客户端在响应中需要什么?