HTTP コード 301 は、ご存じのとおり、「Moved Permanently」を意味します。
Apache は適切な URL に丁寧にリダイレクトしています。指定した URL のリソースが存在しないため、405 を返すことはできません。しかし、その正確な URL でリソースを作成することもできません。できることは、適切な URL でリソースを作成してからリダイレクトすることです。
しかし、あなたの質問に答えるには、あいまいさを取り除くためにコレクションを「/」で終了する必要があります。そうしないと、結果のURI正規化の動作はサーバー次第になると思います。末尾のスラッシュを追加することがRFCで義務付けられているとは思いません。
編集:
MKCOL は末尾のスラッシュがなくても成功する場合がありますが、作成されたと報告されたリソースには末尾のスラッシュがあることに注意してください。
RFC によると、サーバーにはオプションがあります。仕様に違反しない限り、URLの正規化手順を決定するため。
その後、サーバーは、すべての操作で送信する URL を正規化し、多くの 3xx コードを返すことができます。これは高価になります。または、最初に修正することもできます (POST、MKCOL など)。その後、失敗するか、リダイレクトします。
ただし、重要な点は、優先する URL が常に通知されることです。
RFC 2616の HTTP URL スキームについて
3.2.3 URI の比較
2 つの 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 エンコーディングと同等です。
たとえば、次の 3 つの URI は同等です。
http://abc.com:80/~smith/home.html
http://ABC.com/%7Esmith/home.html
http://ABC.com:/%7esmith/home.html
abs_path の定義方法について言及されていないことに注意してください。また、仕様によると、サーバーは厳密に言えばスラッシュを無視することはできません。したがって、「MKCOL /collection」を発行して、新しい「/collection/」URL なしで作成された通常の 2xx を取得するのは正しくありません。
私の知る限り、abs_path を定義する関連する RFC では、末尾のスラッシュが指定されていません。したがって、それらを比較して正規化する方法はサーバー次第です。