WebDAV 経由でコレクションを作成する場合、コレクション名はスラッシュで終わる必要があります

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

  •  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 では末尾のスラッシュが指定されていません。したがって、それらをどのように比較して正規化するかはサーバー次第です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top