Apache似乎在爲簡單的不存在的收集資源發送400錯誤請求。Apache mod_dav 400對不存在的收集資源的錯誤請求
我有一個資源/test/junit/test.bin
。我想檢查集合/test/junit/test.bin/
是否存在(即相同名稱的集合)---根據RFC 2518,集合(帶有斜槓)和非集合是不同的。當我在/test/junit/test.bin/
上發出PROPFIND
時,Apache響應400錯誤請求。
現在,我明白很多人和實現已經模糊了集合和非集合之間的界限 - 也就是說集合是否必須有結尾斜槓。但無論如何,集合/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>
這裏就是阿帕奇放入日誌:
[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更合適?
我個人懷疑apache是否在錯誤日誌中顯示更多細節。您可以將錯誤日誌級別設置得相當高。 – Evert
好主意---我從日誌中添加了相關條目。這是關於你會猜到的。我不同意Apache的方法---其他人同意? –
我已經提交了一個Apache的錯誤:https://issues.apache.org/bugzilla/show_bug.cgi?id=52539 –