[TIL] HTTP: The Definitive Guide "p432 ~ p439"

시윤·2026년 2월 23일

[TIL] Two Pages Per Day

목록 보기
155/158
post-thumbnail

Chapter 19. Publishing Systems

(해석 또는 이해가 잘못된 부분이 있다면 댓글로 편하게 알려주세요.)


✏️ 요약


WebDAV Locking and Overwrite Prevention

  • Lost Update Problem : A가 수정한 문서를 B가 덮어씀으로 인해 A의 수정사항이 반영되지 않는 문제
  • WebDAV Locking
    • Exclusive Write Locking : Lock을 가진 owner가 쓰기 권한 독점 -> 충돌이 발생할 만한 잠재적인 위험 제거
    • Shared Write Locking : 그룹 단위로 리소스의 쓰기 권한 소유 -> 각각의 author가 교집합 없이 서로 다른 역할을 가지고 있는 경우 적합한 방식
  • PROPFIND
    • 리소스의 Locking 지원 여부, 리소스가 사용 가능한 Lock 타입을 결정하는 속성
  • Locking Process
      1. Lock 부여 -> 서버가 opaquelocktoken 발급
      1. Digest authentication 수행
      1. WebDAV 클라이언트가 토큰과 함께 PUT 요청 수행

The LOCK Method

  • WebDAV Locking
    • 클라이언트가 서버와 연결을 유지하지 않아도 된다
    • 하나의 LOCK 요청으로 여러 개의 리소스를 락할 수 있다
  • XML elements
    • <locktype> : lock 유형 (write)
    • <lockscope> : exclusive or shared 명시
    • <owner> : 현재 락을 소유한 사용자가 누구인지 지정
    • <locktoken> : URI scheme에서 락을 식별하기 위한 토큰
    • <depth> : 클라이언트 요청에 포함된 Depth 헤더의 값 (디렉토리 depth)
    • <timeout> : 락의 유효시간
  • Request
    LOCK /ch-publish.fm HTTP/1.1
    Host: minstar
    Content-Type: text/xml
    User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows NT)
    Content-Length: 201
    <?xml version="1.0"?>
    <a:lockinfo xmlns:a="DAV:">
    <a:lockscope><a:exclusive/></a:lockscope>
    <a:locktype><a:write/></a:locktype>
    <a:owner><a:href>AuthorA</a:href></a:owner>
    </a:lockinfo>
  • Response
    HTTP/1.1 200 OK
    Server: Microsoft-IIS/5.0
    Date: Fri, 10 May 2002 20:56:18 GMT
    Content-Type: text/xml
    Content-Length: 419
    <?xml version="1.0"?>
    <a:prop xmlns:a="DAV:">
    <a:lockdiscovery><a:activelock>
    <a:locktype><a:write/></a:locktype>
    <a:lockscope><a:exclusive/></a:lockscope>
    <a:owner xmlns:a="DAV:"><a:href>AutherA</a:href></a:owner>
    <a:locktoken><a:href>opaquelocktoken:*****</a:href></a:locktoken>
    <a:depth>0</a:depth>
    <a:timeout>Second-180</a:timeout>
    </a:activelock></a:lockdiscovery>
    </a:prop>
  • HTTP 상태코드

The opaquelocktoken scheme

  • 모든 리소스에 대해 고유하게 발급
  • WebDAV 명세에서는 ISO-11578의 UUID 매커니즘을 사용할 것을 권장함

The <lockdiscovery> XML element

  • 락 리프레시 방법
    • 요청 : 락 토큰을 If 헤더에 포함하여 전송
    • 응답 : 허용되는 타임아웃 값을 포함하여 반환 (콤마로 구분된 리스트)
  • Lock timeout은 가이드라인일 뿐 서버와 반드시 연동되는 것은 아니다 (관리자가 수동으로 리셋하거나 예기치못한 사건으로 락이 리셋될 수도 있다)
  • Lost Update Problem을 완전히 해결하지 못한다

The UNLOCK Method

  • Digest authentication이 성공적으로 이루어지고 토큰이 일치할 때 언락 가능
  • 언락에 성공할 경우 204 No Content 상태코드 반환
  • 언락에 실패할 경우 424 Failed Dependency 상태코드 반환

Properties and META Data

  • live properties : 동적으로 수정 가능한 속성
  • dead properties : 정적인 속성
  • WebDAV는 live properties를 지원하기 위해 HTTP에 PROPFINDPROPPATCH 메서드를 추가함

The PROPFIND Method

  • 주어진 리소스나 컬렉션의 속성을 얻기 위한 메서드
  • 한 번의 호출로 컬렉션의 모든 계층에 대한 속성과 값을 획득할 수 있는 표현력을 가진다
  • 유형
      1. 모든 속성과 그 속성의 값 요청
      1. 주어진 속성과 그 속성의 값 요청
      1. 모든 속성의 이름 요청
  • XML elements
    • <allprop> : 반환할 모든 속성의 이름 -> 모든 속성과 그 속성의 값을 얻기 위해 <propfind> element에 <alldrop>을 포함하거나 본문 없이 요청을 전송해야 한다
    • <propname> : 반환할 일부 속성의 이름 집합
    • <prop> : <propfind>의 서브 요소 -> 구체적인 속성과 값을 명시하는 요소
    • <multistatus> : 여러 개의 응답을 포함하기 위한 컨테이너
    • <href> : 리소스의 URI를 식별하기 위한 요소
    • <status> : 특정 요청의 HTTP 상태 코드를 포함하는 요소
    • <propstat> : 한 <status> 요소와 <prop> 요소를 그룹핑하는 요소
  • Request
    PROPFIND /ch-publish.fm HTTP/1.1
    Host: minstar.inktomi.com
    User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows NT)
    Depth: 0
    Cache-Control: no-cache
    Connection: Keep-Alive
    Content-Length: 0
  • Response
    HTTP/1.1 207 Multi-Status
    Server: Microsoft-IIS/5.0
    ...........
    <?xml version="1.0"?>
    <a:multistatusxmlns:b="urn:uuid:********/" xmlns:c="xml:" xmlns:a="DAV:">
    <a:response>
        <a:href>http://minstar/ch-publish.fm </a:href>
        <a:propstat>
            <a:status>HTTP/1.1 200OK</a:status>
            <a:prop>
                <a:getcontentlength b:dt="int">1155</a:getcontentlength>
          ......................
          ......................
                <a:ishidden b:dt="boolean">0</a:ishidden>
                <a:iscollection b:dt="boolean">0</a:iscollection>
            </a:prop>
        </a:propstat>
    </a:response></a:multistatus>

The PROPPATCH Method

  • 주어진 리소스에 대해 여러 개의 속성을 지정 혹은 삭제할 수 있는 원자적 매커니즘
  • 원자성 -> 모든 요청이 성공하거나 완전히 실패함이 보장된다
  • XML elements
    • propertyupdate : 수정할 모든 속성을 담는 컨테이너
    • set : 설정할 속성값을 명시하는 요소, 한 개 이상의 <prop> 서브 요소를 포함 (이미 속성값이 존재하는 경우 덮어쓴다)
    • remove : 삭제할 속성값을 명시하는 요소, <prop> 서브 요소에 속성명만 포함
  • Request
    <d:propertyupdate xmlns:d="DAV:" xmlns:o="http://name-space/scheme/">
    <d:set>
    <d:prop>
    </d:prop>
    </d:set>
    <o:owner>Author A</o:owner>
    <d:remove>
    <d:prop>
    <o:owner/>
    </d:prop>
    </d:remove>
    </d:propertyupdate>
profile
틈틈이 두 페이지씩 원서 읽기

0개의 댓글