2016-10-18 2 views
0

웹 파일 관리자를 만들고 있는데 최근에 WebDav를 구현하라는 제안을 받았으며 정말 좋은 아이디어라고 생각했습니다.HTTP 요청이 WebDav 클라이언트에서 온 것인지 확인하는 방법은 무엇입니까?

나는 웹 주소를 /webdav과 같은 별도의 URL로 유지하는 것에 대해 생각했지만 이제는 내가 만든 웹 인터페이스와 webdav 서버를 같은 URL에 유지하는 것에 대해 생각하고 있습니다.

HTML 페이지 나 파일을 제공해야하는지 알고 싶다면 브라우저 또는 웹 서버에서 액세스 중인지 알아야합니다. 어떻게 알 수 있을까요? 사용자 에이전트가 충분한가요?

그렇다면 어떤 user-agent를 WebDav 클라이언트로 취급해야합니까?

감사합니다.

+0

Accepts Header를 볼 수는 있지만 질문에 대해서는 확실하지 않습니다. 왜 GET과 같은 일에 DAV 클라이언트에 대해 다른 응답을 제공해야합니까? 브라우저가 HTML 페이지를 요청하거나 DAV 클라이언트가 HTML을 요청하면 HTML을 가져와야합니까? 또는 브라우저에서'foo.ph'p를 요청하면 HTML을, DAV Client는'foo.php'를 요청하여 소스 코드를 얻습니다. – Doon

+0

마지막 @Doon! 웹 인터페이스는 파일을 편집하고, 파일 및 기타 모든 것을 삭제할 수 있습니다. 파일 관리자 + 편집기입니다. 그래서 GET에 대한 다른 응답이 필요합니다. :) –

답변

1

잠재적으로 인증 된 대 검증되지 않은 것과 같은 것을 사용하여 확인할 수는 있지만이를 수행하지 말아야합니다. 또한 DAV 사양을 분산 저작 기능의 부재에서 (RFC 2518) (http://www.webdav.org/specs/rfc2518.html)

를 읽고,이 URI 네임 스페이스에 소스 자원 (들)의 매핑이없는 것으로 허용됩니다. 실제로 원본 리소스에 대한 액세스를 차단하면 바람직한 보안 이점이 있습니다. 그러나 소스 리소스의 원격 편집이 필요한 경우 원본 리소스에 URI 네임 스페이스의 위치를 지정해야합니다. 이 소스 위치는 생성 된 출력을 검색 할 수있는 위치의 이 아니어야합니다. 일반적으로 서버가 소스 자원과 프로세스 출 ​​력 자원에 대한 요청을 구분할 수 없습니다. 여기서 은 종종 소스 자원과 출력 자원 사이의 다 대다 관계입니다.

중요한 부분은 여기이 소스 위치는> 서버가 요청을 차별화하기 위해 일반적으로는 불가능하기 때문에> 생성 된 출력, 검색 할 인의 위치 중 하나 안

입니다 > 프로세스 출력 자원 요청에 대한 소스 자원

+0

다시 @Doon! 따라서 @Evert에 말했듯이, 'http : // localhost/folder/file.txt'와'http : // localhost/webdav/folder/file.txt'를 사용하는 것이 최선의 방법이라고 생각합니다. 첫 번째는 웹 인터페이스 용이고 두 번째는 Dav 클라이언트 용입니다. 내가 맞습니까? –

+0

네 고유 한 URI가 있어야합니다. 이름은 중요하지 않습니다. 이름은 중요하지 않습니다. – Doon

+0

감사합니다. @Doon! :) –

1

하지 마십시오. User-Agent을 사용하여 서버가 표시 할 동작을 결정하는 것은 일반적으로 좋지 않은 아이디어이며 WebDAV에도 좋지 않은 아이디어입니다. 일부 클라이언트는 1 개 이상의 사용자 에이전트를 사용하고 일부 클라이언트는 꽤 일반적인 (컬) 것들을 사용하고 다른 클라이언트는 전혀 제공하지 않습니다. WebDAV 클라이언트를 구축 할 수없고 허용 된 사용자 에이전트 중 하나를 모방하지 않으면 작동 할 것으로 기대하기 때문에 시스템이 부서지기 쉽고 오류가 발생하기 쉽고 비표준이됩니다.

그 말은 ... 당신은 여전히 ​​User-Agent을 피할 수 있습니다. WebDAV는 PROPFIND HTTP 메서드를 사용하여 WebDAV 클라이언트 연결 여부를 정확하게 확인할 수 있습니다.

그러나, 여전히 파일을 가져오고 저장하는 데뿐만 아니라 GETPUT을 사용하여, 당신은 엄격한 WebDAV를 계층 구조의 시스템을 구축해야합니다. 기존 URL 구조가 이미 1 : 1이 파일 시스템 계층 구조와 일치하면 작동 할 수 있습니다.

몇 가지면에서 WebDAV 서버를 구축하는 중일뿐입니다. 콜렉션에 대한 html 인덱스가 있습니다. 실제로는 다소 일반적입니다.

마지막으로 자신의 라이브러리를 사용하는 대신 라이브러리를 사용하는 것이 좋습니다.

출처 : 나는 popular webdav framework의 저자입니다.

+0

안녕하세요! 귀하의 답변에 감사드립니다. Go와 자체 webdav 라이브러리를 사용하고 있습니다. 현재 디렉토리 구조는 파일 시스템과 정확히 같습니다. 그러나 사용자가 브라우저에서 파일을 요청할 때 html을 표시하여 사용자가 브라우저에서 직접 편집 할 수 있도록하고 싶습니다 (내 인터페이스 사용). –

+0

하나의 솔루션은 웹 dav 서버를 별도의 URL로 유지하고 해당 경로에 Ajax 요청을하는 것일 수 있습니다. –

+0

예 :'http : // localhost/folder/file.txt'는 에디터와 모든 것들을 가지고 웹 인터페이스를 보여줍니다. 그러나'http : // localhost/webdav/folder/file.txt'에 접근하면 웹 dav 서버에 접근하게됩니다. –

관련 문제