HTTP

HTTP 완벽 가이드 (19)

kchabin 2025. 3. 18. 02:02

FrontPage(FrontPage Server Extentions, FPSE)

어디서든 배포한다

  • 서버 측 소프트웨어 제품군
  • 서버측 컴포넌트 + 웹 서버
  • 웹 사이트와 FrontPage를 구동시키는 클라이언트(이 확장 지원 클라이언트) 사이에서 필요한 변환 작업 수행
  • FP 클라이언트와 FPSE 사이에서 사용하는 배포 프로토콜

FrontPage 배포 프로토콜

  • HTTP POST 요청 위에 RPC 계층 구현
  • 웹 사이트 문서 갱신, 검색 수행, 웹 개발자들 간 공동 작업
    • FP 클라이언트가 서버에 명령을 보냄

FrontPage RPC

RPC 메서드와 그와 관련한 변수를 POST 요청의 본문에 기술해서 HTTP POST를 감싼다.

  1. 통신 시작
    1. 서버에 있는 대상 프로그램의 이름과 위치 결정
    2. 특별한 GET 요청을 보냄 ⇒ POST 요청을 보낼 위치를 얻어낸다.
  • FPShtmlScriptUrl - 탐색 시간에 관한 요청
  • FPAuthorScriptUrl - 저작 시간 명령에 관한 요청
  • FPAdminScriptUrl - 관리 동작

위치를 알아냈으니 이제 POST 요청을 보낼 수 있다

요청

  • : 메서드 내 빈칸 표현

 

응답

웹 서버에서 유효한 문서의 목록을 특정 형식에 맞추어 작성해 FP 클라이언트에 반환한다.

보안 아키텍처

 

  • 관리자, 저작자, 사용자의 목록은 특정 FPSE 확장 웹에 따라 다르게 정의된다.
  • 모든 서브웹은 루트웹에서 권한을 상속받거나 자체 권한이 있다.

IIS 서버 - 통합된 윈도우 보안 모델 적용

  • 권한 검사 : 주어진 루트나 서브루트에 대한 ACL(Access Control List)을 보고 검사
  • 요청을 받으면, 로그인하고 사용자로 가장한 다음, 세 개의 DLL 중 하나에 요청을 보낸다
  • DLL은 목적지 폴더에 정의된 ACL을 기준으로 가장된(impersonation) 사용자가 권한이 있는지 검사한다.
  • 검사 성공 → 요청된 동작은 확장 DLL을 통해 실행된다.
    • 실패 → 승인 거부(permission denied) 메시지 반환
  • 윈도우 전용 보안 애플리케이션 User Manager

IIS가 아닌 웹 서버

  • 모든 FPSE 프로그램이 “executable” 표시가 된 디렉터리에 저장되어야 함.
    • Fpsrvadm : FrontPage 서버 관리 유틸리티
  • 프로그램 접근 허가된 사용자들을 따로 기술함.
  • 아파치, NCSA → .hataccess 파일, 넷스케이프 → .nsconfig
    • GET, POST 등 다양한 권한 등급의 사용자, 그룹, IP 주소 기술됨

WebDAV

Web Distributed Authoring and Versioning

  • 새로운 HTTP 메서드 집합 정의, 몇몇 http 메서드의 동작 범위 수정

메서드

  1. 추가된 메서드
  • PROPFINE : 리소스의 속성을 읽는다.
  • PROPPATCH : 한 개 이상의 리소스에 대해 한 개 이상의 속성을 설정한다.
  • MKCOL : 콜렉션을 생성한다.
  • COPY : 특정 원본지에서 특정 목적지로 리소스나 리소스의 집합을 복사한다.
  • MOVE : 특정 소스에서 특정 목적지에 리소스나 리소스의 집합을 이동시킨다.
  • LOCK : 하나 이상의 리소스를 잠근다.
  • UNLOCK : 기존에 잠겨있는 리소스를 잠금 해제한다.
  1. 수정된 메서드
  • DELETE, OPTIONS, PUT
  1. XML

XML(Extensible Markup Language) 지원

  • 구조화된 데이터를 표현할 때 사용하는 포맷. 메타 마크업 언어
  • 전통적으로 DTD(Document Type Definition) 준수
    • XML 문서를 해석하려고 할때, 해당 XML 문서와 연관된 DTD 파일의 이름을 제공함.

헤더

DAV : WebDAV를 제공하는 서버와 통신할 때 사용.

  • 지원하는 모든 리소스는 OPTIONS 요청에 대한 응답에 이 헤더를 포함해야 함.

Depth : 여러 수준의 계층 구조로 분류된 리소스에 WebDAV를 사용하기 위한 중요한 요소

  • LOCK, COPY, MOVE 수정

Destination : COPY나 MOVE 메서드가 목적지 URI를 식별하는데 쓰임

  • Destination = “목적지” “:” 절대 URI

잠금

배타적 쓰기 잠금 vs 공유된 쓰기 잠금

  • 배타적 쓰기 - 잠금 소유자만 쓰기 가능
  • 공유된 쓰기 - 그룹이 잠금을 소유함

 

LOCK 메서드

LOCK /docs/myfile.doc HTTP/1.1
Host: www.contoso.com
Timeout: Infinite, Second-4100000000
Content-Type: text/xml; charset="utf-8"
Content-Length: XXXX
Authorization: Digest username="user",
   realm="user@contoso.com", nonce="...",
   uri="/docs/myfile.doc",
   response="...", opaque="..."



  
  
  
    <https://www.contoso.com/~user/contact.htm>
  


 

  • <locktype> : 잠금 형식을 나타냄. 현재는 “쓰기” 하나뿐
  • <lockscope> : 배타적 잠금인지 공유된 잠금인지
  • <owner> : 현재 잠금을 누가 갖고 있는지 알려주는 필드
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>
  • <lockdiscovery> : 잠금 정보 컨테이너
  • <activelock> : 요청에 보내진 정보 <locktype>, <lockscope>, <owner>
    • <locktoken>
    • <depth> : Depth 헤더와 동일한 역할
    • <timeout> : 잠금 타임아웃 설정. 위의 예시에서는 180초

opaquelocktoken scheme

유일성 보장 → UUID

  • 각 LOCK 요청마다 uuid를 생성하거나, 싱글 UUID를 생성하고 끝에 추가적인 문자 추가
  • 후자가 좋은 방법인데, 추가되는 문자 재사용 안한다는 보장 필요

<lockdiscovery> XML 요소

<lockdiscovery> XML 요소는 활성 잠금 검색을 위한 메커니즘을 제공한다. 잠금이 설정된 상태에서 다른 사용자가 파일을 잠가려고 하면 현재 소유자를 나타내는 <lockdiscovery> XML 요소를 받게 됩니다. <lockdiscovery> 요소는 모든 미결 잠금과 속성을 나열한다.

To completely solve it, a cooperative event system with a versioning control is needed.

UNLOCK

리소스의 잠금을 제거함.

UNLOCK /ch-publish.fm HTTP/1.1
Host: minstar.inktomi.com
User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows NT)
Lock-Token:
opaquelocktoken:*********

HTTP/1.1 204 OK
Server: Microsoft-IIS/5.0
Date: Fri, 10 May 2002 20:56:18 GMT

WebDAV는 성공적인 UNLOCK 수행을 위해 다음과 같은 사항을 요구한다.

  • 다이제스트 인증 성공
  • Lock-Token 헤더 속 lock token 매칭

 

 

속성, META 데이터

속성

  • 저작자 이름
  • 수정한 날짜
  • 내용 등급

→ 리소스의 정보 기술

HTML의 META 태그

  • 콘텐츠 일부로써 그 정보들을 포함하는 메커니즘 제공
  • 많은 리소스들이 META 데이터에 포함될 수 없음.
    • 바이너리 데이터

분산 협업 시스템 like WebDAV

  • 더 복잡한 속성
  • 문서 편집 → 새로운 저작자를 반영, 갱신
    • 동적 수정 속성 : ‘live’ 속성
    • Content-Type과 같은 정적 속성 : ‘dead’ 속성

PROPFIND

  • property find
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
<d:**propertyupdate** xmlns:d="DAV:" xmlns:o="<http://name-space/scheme/>">
  <d:**set**>
    <d:prop>
      <o:owner>Author A</o:owner>
    </d:prop>
  </d:set>

  <d:**remove**>
    <d:prop>
      <o:owner/>
    </d:prop>
  </d:remove>
</d:propertyupdate>
  • <propertyupdate> : PROPPATCH 메서드의 기본 XML 요소. 업데이트가 필요한 모든 속성을 담는 컨테이너 역할

콜렉션과 이름공간 관리

콜렉션 : 사전에 정의한 계층에 있는 리소스들의 논리적 혹은 물리적 그룹.

  • 예: 디렉터리 → 파일시스템의 디렉터리 같이 다른 리소스들의 컨테이너처럼 동작
  • 콜렉션은 다른 콜렉션을 포함함

MKCOL

클라이언트가 지정된 URL에 해당하는 콜렉션을 서버에 생성하게 한다.

  • PUT이나 POST로 추가적인 정보를 더해 보는 식으로 즉석에서 프로토콜 생성 → 번거롭고 오류 발생
  • 콜렉션이 이미 존재 → 405 Method Not Allowed
  • 쓰기 권한이 없음 → 403 Forbidden
  • MKCOL /colA/colB 같은 요청을 보냈는데 colA가 존재하지 않음 → 409 Conflict

COPY, MOVE

대안 : 리소스에 GET 요청을 보내고, 리소스를 다운받은 다음, PUT 요청과 함께 서버에 리소스를 다시 올림.

  • MOVE도 유사한 방식의 대안이 있음.
  • 다단게 콜렉션에 대한 COPY, MOVE 작업 시 확장이 쉽지 않다.

원본의 위치 정보 = 요청 URL

목적지 정보 = Destination HTTP 헤더

MOVE의 추가 작업

  • 원본지 URL을 목적지에 복사
  • 새로 생성된 URI 무결성 검사
  • 원본 삭제
{COPY,MOVE} /publishing HTTP/1.1
Destination: 
Depth: infinity
Overwrite: T
Host: minstar

HTTP/1.1 201 Created
Server: Microsoft-IIS/5.0
Date: Wed, 15 May 2002 18:29:53 GMT
Location: <http://minstar.inktomi.com/pub-new/>
Content-Type: text/xml
Content-Length: 0
  • Depth가 0이면 콜렉션을 복사하거나 이동할 경우, 원본의 속성과 같은 속성을 갖고 있는 콜렉션들만 목적지에 생성될 것임.
  • Overwrite 헤더 - T or F 표현

잠긴 리소스 → 목적지로 잠겨있는 리소스 이동 or 복사 금지

  • 잠겨 있는 콜렉션 아래 목적지 → 복사 혹은 이동된 리소스도 잠금 처리
  • COPY 작업이 완료되면 /publishing은 lock1로 잠긴 상태를 그대로 유지, publishing-old는 lock2로 이미 잠겨져 있던 콜렉션 밑으로 옮겨진 덕에 lock2 잠금이 추가될 것임.
  • MOVE → publishing-old는 lock2잠금에 추가됨

'HTTP' 카테고리의 다른 글

HTTP 완벽 가이드 (21)  (0) 2025.03.18
HTTP 완벽 가이드 (20)  (0) 2025.03.18
HTTP 완벽 가이드 (18)  (0) 2025.03.18
HTTP 완벽 가이드 (17)  (0) 2025.03.18
HTTP 완벽 가이드 (16)  (0) 2025.03.18