WebDAV 経由でコレクションを作成する場合、コレクション名はスラッシュで終わる必要があります
-
02-07-2019 - |
質問
使用している WebDAV ライブラリがこのリクエストを発行しています
MKCOL /collection HTTP/1.1
/collection が存在するため、Apache が 301 を発行している宛先
HTTP/1.1 301 Location: /collection/
というよりも、
HTTP/1.1 405 Method Not Allowed
この点に関して仕様は少し曖昧です (あるいは私の解釈かもしれません) が、MKCOL を発行するとき、コレクションの名前は (コレクションであるため) 常にスラッシュで終わる必要がありますか?
解決
ご存知のとおり、HTTP コード 301 は「永久に移動」を意味します。
Apache は親切にも適切な URL にリダイレクトします。指定した URL にはリソースが存在しないため、405 を返すことはできません。ただし、その正確な URL でリソースを作成することもできません。できることは、適切な URL でリソースを作成し、リダイレクトすることです。
しかし、あなたの質問に答えるには、曖昧さを取り除くためにコレクションを「/」で終了する必要があります。そうしないと、結果のURI正規化動作はサーバー次第であると思います。末尾にスラッシュを追加することは、どの RFC でも義務付けられていないと思います。
編集:
MKCOL は末尾のスラッシュがなくても成功する可能性がありますが、作成されたと報告されたリソースには末尾のスラッシュがあることに注意してください。
RFC によれば、サーバーにはオプションがあります。仕様に違反しない限り URL の正規化手順を決定します。
その後、サーバーは、送信された URL をすべての操作で正規化しようとし、大量の 3xx コードを返す可能性があります。これは高価になります。または、最初から修正することもできます (POST、MKCOL など)。)その後失敗するかリダイレクトされます。
ただし、重要な点は、優先する URL を常に通知してくれるということです。
HTTP URL スキームに関するもの RFC 2616
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 では末尾のスラッシュが指定されていません。したがって、それらをどのように比較して正規化するかはサーバー次第です。