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, не указывают конечную косую черту. Таким образом, сервер зависит от того, как он сравнивает и нормализует их.
Я согласен, если наш клиент выполнил перенаправление на/collection /, он получил бы правильный код ответа. Твист есть, если/collection/не существовало, тогда MKCOL/collection бы преуспел. – 2008-09-25 07:50:13