При создании коллекции через WebDAV имя коллекции должно заканчиваться косой чертой.

StackOverflow https://stackoverflow.com/questions/131754

  •  02-07-2019
  •  | 
  •  

Вопрос

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

MKCOL /collection HTTP/1.1

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

HTTP/1.1 301
Location: /collection/

Вместо

HTTP/1.1 405 Method Not Allowed

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

Это было полезно?

Решение

HTTP-код 301, как вы знаете, означает «перемещен навсегда».

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

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

РЕДАКТИРОВАТЬ:

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

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

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

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

Что-то о схеме URL-адресов HTTP от РФК 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, не указывают конечную косую черту.Так что сервер сам решает, как он их сравнивает и нормализует.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top