При создании коллекции через WebDAV имя коллекции должно заканчиваться косой чертой - PullRequest
1 голос
/ 25 сентября 2008

Библиотека WebDAV, которую я использую, выполняет этот запрос

MKCOL /collection HTTP/1.1

Кому apache выдает 301, потому что / collection существует

HTTP/1.1 301
Location: /collection/

Вместо

HTTP/1.1 405 Method Not Allowed

Спецификация немного расплывчата в этом (или это может быть мое прочтение), но при выдаче MKCOL имя вашей коллекции всегда должно заканчиваться косой чертой (как это коллекция)?

1 Ответ

3 голосов
/ 25 сентября 2008

HTTP-код 301 означает «Переехал навсегда», как вы знаете.

Apache любезно перенаправляет вас на правильный URL. Он не может дать вам 405, потому что нет ресурса с указанным вами URL. Но он также не может создать ресурс с таким точным URL. Он может создать ресурс с правильным URL-адресом и перенаправить вас.

Но чтобы ответить на ваш вопрос, вы должны завершить коллекции "/", чтобы убрать неоднозначность, в противном случае результирующее поведение по нормализации URI будет зависеть от сервера, как мне кажется. Я не верю, что добавление этой косой черты разрешено любым RFC.

EDIT:

MKCOL может завершиться успешно без завершающей косой черты, но обратите внимание, что созданный сообщаемый ресурс имеет косую черту.

На сервере есть опция, согласно RFC. Так как он определяет процедуру нормализации URL, если он не нарушает спецификацию.

Затем сервер может попытаться нормализовать любой URL-адрес, который вы отправляете, при каждой операции, возвращая множество кодов 3xx. Это становится дорогим. Или он может исправить вас вначале (POST, MKCOL и т. Д.), А затем потерпеть неудачу или перенаправить после этого.

Но ключевым моментом является то, что он всегда сообщит вам предпочитаемый URL.

Что-то в схеме URL HTTP от RFC 2616

3.2.3 Сравнение URI

При сравнении двух URI для определения если они совпадают или нет, клиент
ДОЛЖЕН использовать регистр символов Сравнение октетов за октетами целые URI, с этими исключениями:

  - A port that is empty or not given is equivalent to the default
    port for that URI-reference;

    - Comparisons of host names MUST be case-insensitive;

    - Comparisons of scheme names MUST be case-insensitive;

    - An empty abs_path is equivalent to an abs_path of "/".

Символы, отличные от «зарезервированные» и «небезопасные» наборы (см.
RFC 2396 [42]) эквивалентны их Кодировка ""% "HEX HEX".

Например, следующие три URI эквивалентны:

  http://abc.com:80/~smith/home.html
  http://ABC.com/%7Esmith/home.html
  http://ABC.com:/%7esmith/home.html

Обратите внимание на отсутствие упоминания о том, как определяется abs_path. Также сервер не может, строго говоря, игнорировать ваш слеш в соответствии со спецификацией. Таким образом, неправильная выдача «MKCOL / collection» и получение обычного 2xx, созданного без нового URL «/ collection /».

AFAIK, связанные RFC, которые определяют abs_path, не задают косую черту. Так что это зависит от сервера, как он сравнивает и нормализует их.

...