Apacheは単純な存在しないコレクションリソースに対して400 Bad Requestを返信しているようです。Apache mod_dav 400存在しないコレクションリソースの要求がありません
私はリソース/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が404ではなく400を返す方が適切だと考えている理由を知りたいのですが?
apacheのエラーログで詳細を示した場合、私は個人的に疑問に思うだろう。エラーログレベルをかなり高く設定することができます。 – Evert
良いアイデア---ログから関連するエントリを追加しました。それはあなたが推測するものです。私はここでApacheのアプローチに同意します---他の誰かが同意しますか? –
私はApacheにバグを提出しました:https://issues.apache.org/bugzilla/show_bug.cgi?id=52539 –