WebDav를 통해 컬렉션을 만들 때 컬렉션의 이름이 슬래시로 끝나면
-
02-07-2019 - |
문제
내가 사용하고있는 WebDav 라이브러리 가이 요청을 발행하고 있습니다
MKCOL /collection HTTP/1.1
/수집이 존재하기 때문에 Apache가 301을 발행하는 곳
HTTP/1.1 301 Location: /collection/
a보다는
HTTP/1.1 405 Method Not Allowed
사양은 이것에 대해 약간 모호합니다 (또는 제가 읽기가 될 수도 있습니다). 그러나 MKCOL을 발행 할 때 컬렉션의 이름이 항상 슬래시로 끝나야합니까 (컬렉션이므로)?
해결책
HTTP Code 301은 알고 있듯이 "영구적으로 이동"을 의미합니다.
Apache는 당신을 적절한 URL로 기꺼이 리디렉션합니다. 제공 한 URL에는 리소스가 없기 때문에 405를 줄 수 없습니다. 그러나 정확한 URL로 리소스를 생성 할 수는 없습니다. 그것이 할 수있는 일은 적절한 URL로 리소스를 만들고 리디렉션하는 것입니다.
그러나 질문에 답하기 위해 "/"로 모호한 모호성을 제거해야합니다. 그렇지 않으면 결과 URI 정규화 동작은 내가 믿는 서버에 달려 있습니다. 나는 RFC에 의해 후행 슬래시가 의무화된다는 것을 추가한다고 생각하지 않습니다.
편집하다:
MKCOL은 후행 슬래시없이 성공할 수 있지만, 생성 된 자원에는 후행 슬래시가 있습니다.
RFC에 따르면 서버에는 옵션이 있습니다. 사양을 위반하지 않는 한 URL 정규화 절차를 결정하기 때문입니다.
그런 다음 서버는 모든 작업에서 보내는 URL을 정규화하여 3xx 코드를 많이 반환 할 수 있습니다. 이것은 비싸다. 또는 처음에는 (게시물, MKCOL 등) 교정 할 수 있습니다. 그런 다음 그 후에 실패하거나 리디렉션 할 수 있습니다.
그러나 핵심 요점은 항상 그것이 선호하는 URL을 알려줄 것입니다.
HTTP URL 체계의 무언가 RFC 2616
3.2.3 URI 비교
두 개의 uris를 비교하여 일치하는지 여부를 결정할 때 클라이언트
예외와 함께 전체 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"을 발행하고 새로운 "/Collection/"URL없이 일반 2XX를 얻는 것이 잘못되었습니다.
AFAIK, ABS_PATH를 정의하는 관련 RFC는 후행 슬래시를 지정하지 않습니다. 따라서 서버가 비교하고 정규화되는 방식에 대해 서버에 달려 있습니다.