Похоже, что Apache отправляет обратно неверный запрос 400 для простого несуществующего ресурса коллекции.
У меня есть ресурс /test/junit/test.bin
.Я хочу проверить, существует ли коллекция /test/junit/test.bin/
(то есть коллекция с тем же именем) - в соответствии с RFC 2518 коллекция (с косой чертой) и не-коллекция различаются.Когда я выдаю PROPFIND
на /test/junit/test.bin/
, 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?