2008-09-25 3 views
1

WebDAV библиотеки Я использую через WebDAV выдает этот запросПри создании коллекции следует название коллекции заканчивается косой чертой

 
MKCOL /collection HTTP/1.1 

К которому Апач выдача 301, потому что/коллекции существует

 
HTTP/1.1 301 
Location: /collection/ 

Вместо

 
HTTP/1.1 405 Method Not Allowed 

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

ответ

3

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

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

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

EDIT:

MKCOL может добиться успеха без слэш, но обратите внимание, что ресурс создан сообщил имеет слэш.

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

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

Но главное, что он всегда позволит вам узнать URL, который он предпочитает.

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

+0

Я согласен, если наш клиент выполнил перенаправление на/collection /, он получил бы правильный код ответа. Твист есть, если/collection/не существовало, тогда MKCOL/collection бы преуспел. – 2008-09-25 07:50:13

 Смежные вопросы

  • Нет связанных вопросов^_^