gpt4 book ai didi

Apache mod_dav 400 对不存在的集合资源的错误请求

转载 作者:可可西里 更新时间:2023-11-01 17:13:24 25 4
gpt4 key购买 nike

Apache 似乎正在为一个简单的不存在的集合资源发回 400 Bad Request。

我有一个资源 /test/junit/test.bin。我想检查集合 /test/junit/test.bin/ 是否存在(即同名集合)---根据 RFC 2518,一个集合(带斜线)和非集合是不同的。当我在 /test/junit/test.bin/ 上发出 PROPFIND 时,Apache 响应 400 Bad Request。

现在,我明白许多人和实现已经模糊了集合和非集合之间的界限——即集合是否必须有一个结束斜杠。但无论如何,集合 /test/junit/test.bin/ 不存在---在不存在的集合上发出 PROPFIND 不是“错误的请求”。 Apache 不应该简单地发布一个标准的 404 Not Found 或 410 Gone 吗?我的请求有什么“不好”之处?

PROPFIND /test/junit/test.bin/ HTTP/1.1
depth: 1
content-length: 102
authorization: BASIC XXXXX
host: example.com

<?xml version="1.0" encoding="UTF-8"?>
<D:propfind xmlns:D="DAV:">
<D:allprop />
</D:propfind>

HTTP/1.1 400 Bad Request
Date: Mon, 23 Jan 2012 15:30:37 GMT
Server: Apache/2.2.11 (Unix) mod_ssl/2.2.11 OpenSSL/0.9.8k DAV/2 SVN/1.7.2 mod_jk/1.2.28
Content-Length: 226
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
</body></html>

这是 Apache 在日志中的内容:

[Mon Jan 23 14:31:09 2012] [error] [client XX.XXX.XX.XXX] Could not fetch resource information.  [400, #0]
[Mon Jan 23 14:31:09 2012] [error] [client XX.XXX.XX.XXX] (20)Not a directory: The URL contains extraneous path components. The resource could not be identified. [400, #0]

是的,我知道存在同名资源,我正在询问集合的属性。所以我们可以说“这就是 Apache 这样做的原因”。但这并不能解释任何事情——它只是对 Apache 将要做什么的预测。我想知道为什么 Apache 认为发回 400 比发回 404 更合适?

最佳答案

我在 Windows 2012 上作为 Webdav 服务器运行的 Apache 2.4 遇到了同样的错误并解决了它禁用“mod_negotiation.so”:

#LoadModule negotiation_module modules/mod_negotiation.so

关于Apache mod_dav 400 对不存在的集合资源的错误请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8976331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com