HTTP Next Generation

김 용 운
305-350, 대전광역시 유성구 가정동 161번지
한국전자통신연구소 멀티미디어표준연구실
E-mail : qkim@pec.etri.re.kr
URL : http://pec.etri.re.kr/~qkim/
Abstract:
HTTP는 HyperText Transfer Protocol의 약자이며 WWW에서의 하이퍼텍스트 문서의 전송을 위해 쓰이는 프로토콜이란 뜻이다. 그러나 글뜻에서 보이는 HyperText 문서만이 아니라 음성, 화상, 데이타 등과 같이 MIME에 의해 정의되는 모든 문서 형식을 전송할 수 있다.

이러한 가능성은 그만큼 사용자의 복잡 다양한 요구를 수용할 수 있어야 한다는 뜻을 함축하고 있으며, 인터넷에 존재하는 각종 서비스들을 하나로 통합하여 서비스할 수 있다는 뜻도 갖고 있다. 이에 따라 HTTP 프로토콜은 현재 HTTP/1.0의 제한적 서비스 영역을 넘어 보다 확장되고 다양한 사용자의 요구를 충족시킬 수 있도록 개발되고 있다.

HTTP Next Generation에서는 프로토콜의 개발 동향을 살펴보고자 하며, 이를 통해 앞으로 가능하게 될 인터넷의 종합적 서비스 도구로서의 WWW을 전망해보고자 한다.

Keywords:
HTTP, Session, TCP, Connection, Authentication, Charging

1. 서론

1.1 HTTP vs. TCP/IP

HTTP는 World Wide Web에서 사용하고 있는 데이타 전송 프로토콜이며 MIME으로 지정할 수 있는 모든 데이타 형식에 대해 바이나리 모드로 전송할 수 있다. 이것은 FTP의 경우에서와 같이 데이타 송수신이 가능함을 뜻하며, 다만 WWW용의 추가적인 정보가 HTTP 프로토콜에서 활용되고 있을 뿐이다. 따라서 HTTP 프로토콜은 TCP/IP 프로토콜 체계 가운데 응용 프로토콜로서 한 자리를 차지한다.

다음의 그림 1과 같이 HTTP는 FTP처럼 TCP 연결을 통해 데이타를 송수신한다.


[그림 1] TCP/IP Protocol Stack

따라서 HTTP는 TCP/IP 기반 위에서 데이타 송수신이 이루어지고, FTP에서 get, put, dir 등의 응용 프로토콜 기능이 있는 것처럼 HTTP에서도 get, put, post, head 등과 같은 응용 프로토콜 기능이 있다.

이렇게 TCP/IP 프로토콜을 기반으로 동작하기 때문에 사용하는 TCP 포트가 있으며 80번으로 지정되어 있다. 다른 포트를 이용할 수도 있으나 기본적으로 정의되어 있는 번호는 80번이다. 그렇다고 해서 HTTP 프로토콜은 TCP/IP에서만 동작할 수 있는 것은 아니다. OSI 참조모델을 이용한 프로토콜 체계에서도 HTTP 프로토콜은 응용 프로토콜로서 활용될 수 있는 것이다. 다만 다른 프로토콜 체계에서 사용하고자 할 때는 그에 맞게끔 적절한 수정을 해야만 가능할 것이다.

1.2 HTTP 프로토콜의 동작

실제적인 정보시스템에서는 검색, 정보 갱신, 및 주석 등과 같은 간단한 작업보다는 보다 다양한 기능을 필요로 하고 있다. 또한 분산 환경, 공동작업 환경, 하이퍼미디어 정보시스템 등의 상황에서 필요로 하는 속도와 간편성을 제공하기 위한 프로토콜이 필요하게 되었고 이를 목적으로 HTTP 프로토콜이 설계되었다.

HTTP 프로토콜은 요구/응답 (Request/Response) 방식을 이용하여 동작하고 있다. 즉, 원하는 프로토콜 기능(예: GET, DELETE, POST, HEAD, etc.)에 대해 서비스 요구를 하면 데이타 통신을 위한 TCP 연결이 만들어지고 서버가 응답을 보내어 데이타 전송을 끝내면 자동적으로 연결이 끊어지게 되는 것이다.

FTP 프로토콜의 경우 하나의 화일을 송신 또는 수신하고 난 다음에도 그 연결은 끊어지지 않아 또 다른 요구를 할 수 있지만, HTTP 프로토콜의 경우에는 다시 연결을 만들어 요구해야 하는 방식이다.[Simon5]

1.2.1 Requests

HTTP의 Request 형식은 아주 간단하다. 첫 번째 줄 처음에 어떤 기능을 이용하려는지 지정을 한다. 가장 일반적으로 쓰이고 있는 것이 GET 이다. 이것은 브라우저가 서버에게 문서를 보내달라고 요청하는 것이다. 그 다음에는 화일 이름처럼 대상이 되는 것을 지정하고 현재 쓰이고 있는 HTTP 프로토콜의 버전을 지정한다. 이 다음에는 일련의 지정 사항들을 덧붙일 수가 있은데, 예를 들어 브라우저의 종류나 브라우저가 다룰 수 있는 데이타 형식 등이다. 아래와 같은 예를 볼 수 있다.

Request Example
GET  /index.html  HTTP/1.0
Accept: text/plain
Accept: text/html
Accept: */*
User-Agent: Netscape 1.2

1.2.2 Responses

HTTP에서의 응답 형식도 아주 간단하게 구성되어 있다. 서버에서 쓰이고 있는 프로토콜 버전, Request에 대한 실행 결과, 전달해줄 데이타의 형식, 데이타 길이 등과 같은 추가적인 정보가 전달되고, 이러한 헤더 정보의 끝을 나타내는 빈줄이 들어가고, 뒤이어 실제 데이타가 전달된다. 데이타 전달이 끝나면 서버는 연결을 끊는다. 아래와 같은 예를 볼 수 있다.

Response Example
HTTP/1.0 200 OK
Server: MDMA/0.1
MIME-version: 1.0
Content-type: text/html
Last-Modified: Thu Jul 7 00:25:33 1994
Content-Length: 2003

Right here waiting for you...

1.3 HTTP 프로토콜의 문제점

이러한 요구/응답 방식은 나름대로 장단점을 갖고 있다. URL (Uniform Resource Locator)을 이용한 하이퍼링크로 구성되어 있는 HTML 문서에서는 각종 프로토콜과 호스트 이름을 지정하여 문서 요청을 위한 연결을 만들어 데이타를 갖고 올 수 있다. FTP의 경우에서처럼 하나의 호스트에 오래 연결을 맺고서 여러 가지 문서들을 갖고 오는 것이 아니라 하이퍼텍스트 문서에 있는 하이퍼링크를 통해 전혀 다른 호스트에 접속하여 문서를 요청할 수 있기 때문에 연결이 지속적으로 유지되는 방식보다는 요구/응답의 방식으로 동작하는 것이 보다 효율적이게 된다.

하지만 많은 경우에 갖고 오는 데이타는 같은 장소에 있는 것이다. 따라서 같은 호스트에서 여러가지 문서를 갖고 올려고 한다면 각각의 문서마다 별도의 TCP 연결을 만들고 이 과정에서 추가적인 부담이 생기게 된다. FTP의 경우에는 한 번 맺어진 연결을 통해서 여러 번 문서 요청을 하면 되지만 HTTP 프로토콜에서는 문서마다 각각의 연결을 만들어야 하는 추가적인 부담이 발생하는 것이다. 따라서 같은 장소에서 많은 문서를 갖고 올려고 할 때 HTTP 프로토콜은 성능상의 저하를 발생시키고 있는 것이다.

1.4 HTTP Next Generation

이러한 문제점을 해결하고, On-Line 쇼핑과 같은 상업적인 응용들을 염두에 둔 기능들을 보완하여 새로운 프로토콜을 설계하고자 하고 있다. 이것은 두 가지 방식으로 진행되고 있는데 현재의 프로토콜을 보완하는 방법이 하나이고 아예 새로운 프로토콜을 설계해서 기존의 HTTP 프로토콜을 대체하는 방법이 나머지 한 가지이다. HTTP-NG란 명칭은 기존의 HTTP 프로토콜을 대체하는 새로운 프로토콜을 설계하고자 하는 것이다.[Simon1][Simon2]

2. HTTP-NG Activities

2.1 개요

HTTP는 인터넷에서 가장 빠르게 성장하고 있는 프로토콜이다. 구현하기도 손쉬우며 지금 이 순간에도 엄청난 양의 데이타가 이 프로토콜에 의해 전송되고 있다. 이렇게 잘 동작하고 있음에도 HTTP를 대체하는 새로운 프로토콜을 설계하고자 하는 것은 앞서 말한 성능상의 문제와 사용자 확인 및 사용료 징수 등과 같은 수단으로 상업적 응용의 목적을 달성하기 위해서이다.[Simon1]

기존의 프로토콜에다 각종 기능들을 추가하고 개선하여 활용하는 방법도 있으나 필요한 요건들이 프로토콜 동작의 기본 모델과 관련한 것이기 때문에 이를 바꾸지 않고서는 문제를 더 복잡하고 어렵게 만든다. 이에 따라 다른 동작 모델을 사용하여 새로운 프로토콜을 설계하고자 하는 것이다.[Simon2]

2.2 사용자 요구사항

새로운 프로토콜을 개발하고자 할 때 검토할 수 있는 요구사항들은 세 가지 대상에 대한 것으로 나누어볼 수 있다. 즉, 다음과 같다.

서비스 사용자
사용자들은 웹서비스를 이용하면서 문서를 갖고 오는 데 걸리는 시간 없이 즉시 받아보고자 한다.

서비스 제공자
가능한한 많은 사용자를 확보하고 등록된 사용자에게만 접근을 허용하며 이를 통해 상업적인 성공을 추구하고자 한다.

소프트웨어 개발자
구현하기가 쉽고 개발 작업이 편해야 한다.

각 대상들이 갖는 이런 요구사항들을 충족시키는 프로토콜이 개발되어야 한다. 이를 위해 필요한 사항들과 현재의 TCP/IP 프로토콜상의 문제점들을 나열해 보도록 한다.

Simplicity
HTTP-NG는 구현하기가 쉬운 프로토콜이어야 한다.

Performance
전세계에 걸친 네트워크 상에서 데이타 송수신이 효율적이어야 한다.

Asynchronicity
앞서 요청했던 서비스 요구에 상관없이 언제든지 원하는 서비스 요구를 할 수 있어야 한다. 즉, 앞서 요구한 서비스에 의해 현재의 서비스 요구가 제한받아서는 안 된다. 또한 하나의 연결 상에서 동시에 여러 개의 데이타를 수신할 수 있어야 한다.

Security
보안을 위해 암호화 되어 있는 데이타를 전송할 수 있어야 한다. 이를 위해 한 가지 메카니즘만 제공되면 안 된다.

Authentication
사용자에 대한 인증이 가능해야 한다.

Charging
사용량에 비례하는 과금을 할 수 있어야 한다. 이를 위해 한 가지 방법만 제공해서는 안 된다.

Intermediate Servers
캐시와 미러의 기능을 위해 중간 게이트웨이 역할을 할 수 있어야 하며, 서버와 서버 사이의 동작도 가능해야 한다.

Mandatory Displays
저작권 사항이나 저자에 관한 것 처럼 반드시 표시되어야 할 사항에 대해 지원할 수 있어야 한다.

Logging Information
중간 게이트웨이 역할을 하는 서버와 원래 호스트 서버 사이에서 logging information이 관리되어야 한다.

Network Requirements
TCP와 같은 전송 프로토콜에 상관없이 데이타 전송이 가능해야 한다. 다시 말해서 TCP가 아닌 다른 수송계층 프로토콜에도 적용할 수 있어야 한다는 것이다. 그러나 현재의 응용들은 전부 TCP 프로토콜 위에서 이루어지고 있으므로 TCP 상황에서도 잘 동작해야 한다.

TCP and Internet
HTTP 프로토콜은 결국 TCP 프로토콜을 이용할 수밖에 없으므로 HTTP 프로토콜 성능의 상당 부분은 TCP 프로토콜에 의해 영향을 받는다. 따라서 프로토콜의 설계에서는 TCP 프로토콜의 특성을 잘 파악해야 한다.

Connection Setup Costs
TCP 연결을 맺으면서 RTT(Round Trip Time) 만큼의 지연이 생긴다.

Slow Start limits transfer rates during start up.
하나의 데이타 패킷 속에 요구하는 정보를 전부 지정할 수 없다면 몇 개의 데이타 패킷으로 나뉘어져 요구정보가 전달될 것이고 slow start 알고리즘에 의해 추가적인 RTT 지연이 발생하게 된다.

Congestion information is not shared between connections.
브라우저와 서버 사이에 여러 개의 데이타 전송 연결이 만들어져 있을 때 각각의 연결 사이에 아무런 정보 교환이 없기 때문에 전송상의 문제가 생기더라도 대처할 방도가 없다. 이에 따라 성능상의 문제를 더 크게 한다.

2.3 프로토콜 모델

HTTP 프로토콜이 동작하는 방식은 아래 그림 2와 같이, 브라우저의 각 요구들마다 매번 새로운 연결을 만들어서 데이타를 가져오고 있다. 따라서 다섯 가지의 문서 화일을 가져오기 위해서는 다섯 개의 연결을 만들어서 갖고 오게 된다.[Simon2]


[그림 2] HTTP 프로토콜의 동작 모델

이에 비해, HTTP-NG 프로토콜 구조에서는 다른 모델을 사용하고 있다. 다음 그림 3과 같이 각 문서 요구에 대해 별도의 연결을 만들기 보다는 여러 개의 문서 요구에 대해 하나의 연결만 만들도록 한다. 이 하나의 TCP 연결 속에서 '세션(session)'이라고 불리우는 여러 개의 가상적 연결을 만들도록 한다. 이 가운데 하나는 세션 연결에서 제어 정보를 주고 받기 위해 쓰인다. 나머지 세션 연결선에 실제 데이타가 전달된다.


[그림 3] HTTP-NG 프로토콜의 동작 모델

2.4 HTTP-NG 프로토콜의 동작

HTTP-NG에서의 요구/응답은 '메시지' 단위로 처리되며, GET 요구를 통해 문서를 요구하는 경우에 원하는 문서 목록을 지정하여 요구하고, 각각의 문서들은 세션 연결을 통해 동시에 전달된다. 데이타를 수신하고 있는 동안에도 기다릴 필요없이 문서 요청을 할 수 있으며, 하나의 데이타 스트림 속에 여러 개의 문서가 사이사이에 끼어 있을 수 있다. 따라서 중간 게이트웨이 역할을 할 때도 서로 다른 브라우저가 같은 서버에 대해 요구를 할 때 효율적으로 동작할 수 있는 수단이 된다.

HTTP 프로토콜을 통해 송수신되는 데이타는 텍스트 정보 그대로여서 사람들이 이해하기 쉬운 형태이나 다양한 데이타 형식이 복합적으로 쓰일 때는 복잡한 구조로 표현되어야 하고 다루기가 어려워진다.

이에 따라 HTTP-NG에서는 전달되는 문서 정보들을 ASN.1 (Abstract Syntax Notation)과 PER (Packed Encoding Rules) 형식으로 인코딩하여 전달되도록 한다. 이미 이 방식으로 동작하는 효율적인 도구가 있기 때문이다.

2.4.1 Request/Response Ordering

HTTP-NG 메시지는 동작 레벨에 대한 협상 결과에 따라 교환된다.[Simon4]

Synchronous Level
다음 동작이 일어나기 이전에 현재 동작이 완료되어야 하며, 모든 동작은 도착되는 요구의 순서대로 이루어져야 한다.

Out-of-Order Level
서버는 어떤 순서대로 메시지 응답을 해도 가능하다. 그러나 다음 동작이 시작되기 전에 현재 동작은 완료되어야 한다.

Interleaved Level
서버는 어떤 순서대로 메시지 응답을 해도 가능하며, 현재의 응답하는 것이 완료되지 않았더라도 새로운 응답 메시지를 보낼 수 있다.

Predictive Level
interleaved level로 동작하면서도 예상되는 요구에 대해서는 요구가 들어오지 않더라도 미리 응답을 보낼 수 있다.

2.4.2 Initializing the Connection

TCP 연결이 일단 설립되고 나면 세션 연결을 위해 일단 먼저 초기화를 시켜야 한다. 브라우저는 허용 가능한 methods(1)와 동작 레벨을 지정하는 초기화 요구를 보내고, 서버는 허용 가능한 methods와 사용할 동작 레벨을 지정하는 초기화 응답을 한다. 이때 브라우저는 이 응답을 받지 않고서도 서버에게 요구를 보낼 수 있다. 만약 서버가 처리할 수 없는 요구 사항이라면 서버는 오류 응답을 보낸다.

이러한 초기화 요구와 응답은 반드시 연결이 설립되고 최초로 전달되어야 한다. 만약 협상이 가능하다면 초기화 요구를 보내고 나서 즉시 협상 요구를 보낼 수 있다. [Simon4]

2.4.3 Normal Message Exchange

초기화 동작이 끝나고 난 다음에는 실제적인 데이타 송수신을 위한 요구와 응답을 주고 받을 수 있다. 서버는 브라우저가 허용 가능하다고 지정한 것 이외에 다른 어떤 메시지도 보내어서는 안 된다.

데이타를 주고 받는 가운데 브라우저는 언제든지 동작 레벨과 method를 바꾸기 위해 초기화 요구를 다시 할 수 있다. 서버는 새롭게 수신한 초기화 요구에 대해, 이전에 수신한 모든 요구 사항들을 처리하고 난 다음에 초기화 응답을 해야 한다. [Simon4]

2.4.4 Error Responses

오류가 발생하게 되면 오류를 알리는 응답이 전달된다. 오류가 발생한 이유에 대해 미리 지정되어 있는 숫자 번호로 알려주고, 추가적으로 알려줄 수 있는 오류 메시지나 정보도 포함될 수 있다. [Simon4]

2.4.5 Request Cancellation

이미 보냈던 요구 사항은 언제든지 취소가 가능하다. 아직 완료되지 않는 동작에 대한 '취소요구'를 서버가 수신하면 수행하고 있던 작업을 중단한다.

만약 브라우저가 원하지 않았던 데이타를 포함하거나 원하지 않았던 응답 메시지가 도착하면 -- 이미 했던 요구 사항을 취소했지만 응답이 도착했을 경우도 포함하여 -- 수신하게 된다면, 취소요구를 서버에게 보내도록 한다. 이를 통해 보다 나은 예측 알고리즘이 동작할 수 있게끔 한다.

'취소요구'(Cancel Request)와 함께 '대기요구'(Suspend Request)도 가능하다. 이것은 서버가 전송 재개를 요청하거나 브라우저가 대기요구를 취소하기 전까지 데이타 전송을 일시적으로 중단시키고 대기 상태로 두게끔 하는 것이다. [Simon4]

2.4.6 Connection Shutdown

브라우저는 연결을 언제든지 끊을 수 있으며 서버도 언제든지 연결을 끊을 수 있다. 적절하게 '해제요구'(Shutdown Request)를 보내어 해제할 수 있다.[Simon4]

2.5 Negotiation

브라우저가 서버에게 여러 가지 문서 전송을 요구하는 것이 일반적인 경우이지만, 반대로 여러 브라우저에게 경고 메시지를 전달할 때와 같은 경우도 있다. 또는 비용 지불을 누가 담당할 것인지 서버는 여러 상대에 대해 협상을 해야할 경우도 있다. 이와 함께, HTTP-NG는 문서의 종류에 제한을 두고 있지 않고 보안 및 지불 방식의 제한도 두고 있지 않으므로 브라우저와 서버 사이에 어떤 방식을 사용할 것인지 협상이 있어야 한다.

HTTP의 경우에는 브라우저가 허용 가능한 것들을 주루룩 나열하여 서버가 선택하는 방식으로 이루어진다. 이같은 방식에서는 전달하는 요구 데이타 크기가 커지고 그만큼 송수신에 시간이 걸리고 처리 시간을 증가시키는 성능상의 문제점을 일으킨다. 이러한 정보가 브라우저 요구 패킷의 95% 부분을 차지한다.

HTTP-NG에서는 일반적으로 가장 많이 쓰이는 데이타 형식들을 목록으로 만들어 짤막한 비트맵 형식으로 인코딩을 한다. 서버와 브라우저는 이 정보와 함께 자신이 허용 가능한 것들을 지정하는 방식으로 협상의 과정을 거친다. 이를 위해 추가적인 숫자 형식의 파라미터가 추가되어야 한다. security schemes, authentication information, payment mechanisms 등에 대한 협상도 같은 방식으로 이루어진다.[Simon2][Simon4]

2.6 Security

지금까지 제안되어 있는 보안 방식들은 부지기수로 존재하기 때문에 HTTP-NG에서는 적용할 수 있는 여러 가지 보안 요소들을 결합하여 general security framework을 만들고 있다. 여기서 체계적인 선택 사안들을 제시하고 이를 선택함으로써 이용하고자 하는 보안 방식을 손쉽게 선택하게끔 하고 있다. 이를 통해 각 HTTP-NG 메시지마다 다른 보안 방식을 사용할 수도 있다. HTTP-NG에서는 중간 게이트웨이 역할을 하는 서버에서도 이런 보안 방식을 지원하므로 데이타 내용에 대해 손대지 않고 암호화 되어 있는 데이타를 그대로 중계해 줄 수 있도록 하고 있다.[Simon2]

2.7 Charging and Payment

HTTP-NG는 브라우저의 요구에 대한 응답으로 서버가 대금 지불 요청을 할 수 있게끔 하고 있다. 이를 위해 적절한 지불 방식과 사용자 인증 방식 등에 대한 상호간 협상을 하여야 한다. 또한 서버는 가격 정보도 함께 제공하여야 한다.[Simon2]

2.8 Mandatory Display & Copyright Control

브라우저가 요구한 정보에 대해 사용자에게 보여줄 때 저작권 사항과 같이 자동적으로 보여주게끔 하기 위해 추가적인 기능을 이용할 수도 있다.[Simon2]

2.9 Transition from HTTP 1.0

HTTP 1.0 프로토콜에서 HTTP-NG 프로토콜로 옮겨가기 위한 방법으로 두 가지를 활용할 수 있다. 한 가지 방법은 HTTP 1.0과 HTTP-NG를 함께 구현하여 각각의 브라우저 요구에 따라 응하는 Dual Stack approach이다. 다른 한 가지 방법은 Proxy Server로서 활용하는 방법이다.[Simon2]

두 가지를 함께 구현하는 Dual Stack 방식에서는 HTTP-NG만 사용하는 만큼의 성능 향상을 기대할 수 없다. 그러나 Proxy Server 방식에서는 캐시되는 정보가 항상 HTTP-NG 프로토콜을 이용하므로 상당한 정도의 성능 향상을 기대할 수 있다. 또한 Proxy Server는 같은 연결 속에서 여러 개의 HTTP 1.0 연결을 동시에 처리할 수 있다.

3. Session Control Protocol (SCP)의 동작

3.1 목적

FTP, GOPHER, HTTP 등과 같이 인터넷에서 폭넓게 사용되고 있는 응용들은 문서를 요청할 때마다 매번 새로운 연결을 만들어서 가져온다. 통상 브라우저는 몇 개의 문서를 같은 서버에서 가져오므로 이러한 문서 송수신 방식은 비효율적인 것임에 틀림없다. 그래서 하나의 TCP 연결에다 여러 개의 conversations, 즉 session 연결을 두어 보다 효율적으로 데이타 송수신 처리를 하고자 한다.[Simon3]

3.2 설계 목표

Unconfirmed service without negotiation
SCP는 session의 설립 절차와 함께 사용자 데이타를 전송할 수 있으며, 수신측에서는 session 설립에 대한 확인을 해주지는 않으며 문제가 발생하면 session 연결을 거절한다. 이 방식이 프로토콜 설계를 간단하게 만들고 session 연결이 설립되었다는 확인을 보내는 데에 들어가는 추가적인 시간 지연을 없앨 수 있게끔 한다.

Low Overhead
여러 개의 요구에 대해 각각의 session 연결을 만들고 하나의 TCP 연결로 요구 사항을 전달할 때, 각각의 session 연결에 대해 8 바이트의 추가적인 부담이 된다. 그러나 데이타 패킷당 한 번씩 추가되는 것이 아니라 데이타 세그먼트당 추가되므로 비교적 적은 부담이 된다.

Simple Design
구현하기가 쉽게끔 간단하게 설계되어야 한다.

3.3 프로토콜 구성

SCP에서 사용하는 헤더의 구성 형식을 보면 다음 그림과 같다.


[그림 4] 헤더 구성 형식

3.4 프로토콜 동작

Session ID 할당
여러 개로 만들어질 수 있는 세션에 대해 1024보다 작은 값으로 session ID가 각각 할당된다. 브라우저가 할당하는 값은 짝수로 구성되고 서버가 할당하는 값은 홀수로 되어 있다.

Session 설립
데이타 채널에 보내진 최초 메시지에 SYN 비트가 1로 표시되면서 세션이 설립된다.

Graceful Release
FIN 비트가 지정되어 있는 메시지를 보냄으로써 세션은 해제된다. 양 끝단은 각각 독립적으로 연결을 해제할 수 있다.

Disgraceful Release
세션은 RST 비트가 지정되어 메시지가 전달됨으로써 해제될 수도 있다. 해제되기 직전에 미치 전달되지 못한 데이타가 있다면 무시해 버린다.

메시지 경계
메시지 사이의 경계는 PUSH 비트로 나타낸다.

4. HTTP Development Issues

이미 앞서 열거했던 HTTP 프로토콜의 문제점들이 파악되어 있기 때문에 현재 프로토콜을 개선하고자 하는 논의가 이루어지고 있으며, 다양한 응용들과 사용자들의 요구사항을 반영하고자 하는 논의가 이루어지고 있다. 여기에서는 현재 HTTP 프로토콜 개발 작업에서 논의되고 있는 주요한 사항들에 대해 살펴보고자 한다. 이러한 사항들은 아직 논의 단계에 있기 때문에 향후의 HTTP 상위 버전에 반영될지는 알 수가 없다.[Archive]

Session Extension
앞서 말한 HTTP 프로토콜의 가장 대표적 문제점이 같은 서버에서 여러 문서를 가져올 때 매번 새로운 연결을 맺어서 가져온다는 것이다. 이에 대한 대처 방안이 하나의 TCP 연결 위에 여러 개의 세션연결을 두어서 해결하는 것이었다. HTTP 개발 작업에도 이 개념이 도입되어 논의되고 있다.

State Information
이것은 위에 있는 Session 연결의 개념과 관련되어 있다. 현재의 HTTP 프로토콜은 앞서 보냈던 요구 사항에 대한 아무런 정보도 갖고 있지 않다. 그래서 상호 독립성은 유지가 되나 상호 관련이 있는 요구 사항들일 경우에는 같은 정보를 매번 전달해야 하는 비효율성이 등장하게 된다. 이에 따라 상호 관련이 있는 요구 사항을 보낼 때는 이미 앞서 보낸 요구에 대한 정보를 갖고 있다가 뒤이어 도착하는 요구 사항에도 적용할 수 있게 한다. 이러한 개념은 위에 있는 세션연결과 관련시켜 적용할 수 있다.

KeepAlive or Persistent Connection
위 문제를 해결하기 위한 또 다른 방안이 바로 이것이다. KeepAlive 개념은 이미 NCSA HTTPD에 구현되어 쓰이고 있다. 다만 브라우저에 이것이 구현되어 있어야만 제대로 동작한다. 이것은 하나의 연결에 대해 여러 개의 요구를 보내도록 하고 있으며, PC 윈도우즈용 NCSA Mosaic에 구현하여 확인해본 결과 30 퍼센트 정도의 성능 향상을 보았다고 한다. 이를 위해 httpd.conf 화일 속에 세 가지의 변수를 서버에서 지정해주어야 한다. 다음과 같다. [KeepAlive]
     KeepAlive on | off
     KeepAliveTimeout N
     MaxKeepAliveRequests N
     
Color Content Negotiation
사용자가 사용하는 화면은 흑백만 지원할 수도 있고 칼라를 지원할 수도 있으며, 칼라의 경우 다양한 색 해상도가 선택될 수 있다. 이러한 경우를 위해 Accept-Color, MIME 형식에서의 파라미터, Accept-Parameter 등 갖가지 방법에 대한 논의가 이루어지고 있다.

Proxy Naming
현재의 proxy server는 중간 게이트웨이로서 firewall을 통과할 때, 또는 보다 빠른 응답을 위한 캐시로서 쓰거나 대역폭을 절약할 목적으로 쓰이고 있는데, 이것은 client 측면의 proxy로서 동작하는 것이다. 왜냐하면 사용자 브라우저에서는 이 proxy 서버의 존재를 알고 있어야 하기 때문이다. 이러한 proxy 서버 개념을 확장하여 client proxy와 server proxy의 개념 도입을 위한 토론이 이루어지고 있다. server proxy는 사용자 브라우저에서는 존재를 알 수가 없다.

HTTP/1.1
현재 W3C의 HTTP Working Group에서 closed로 논의가 이루어지고 있다. 간혹 open mail discussions으로 논의의 일부가 전달되기도 하나 상세히 파악할 수 없다.

5. 결론

현재 쓰이고 있는 HTTP 프로토콜은 성능상의 문제점을 많이 갖고 있으며 지금처럼 확대되고 있는 여러 상업적 응용들을 적절히 지원해줄 수 있을 만큼의 기능을 제공하지 있지 못하다. 이에 따라 성능을 개선하고 추가적인 기능들을 제공하기 위한 HTTP 프로토콜 개발이 한창 이루어지고 있으며, 두 가지 큰 흐름이 기존 프로토콜의 개선 및 확장의 방법과 아예 기존 프로토콜을 대체하는 새로운 프로토콜의 설계가 그것이다. 여기서는 두 가지 방향 모두를 개략적으로 살펴 보았으며, 점차 HTTP-NG 개발 작업은 중단되고 HTTP-NG의 여러 가지 개념들이 HTTP 상위 버전의 개발에 적용되면서 추가적으로 필요한 기능들이 확장되는 방식으로 개발될 것으로 추측한다.

참고문헌(References)

[Simon1]
Progress on HTTP-NG, Simon Spero, UNC Sunsite/EIT
URL: http://www.w3.org/hypertext/WWW/Protocols/HTTP-NG/http-ng-status.html
[Simon2]
HTTP-NG Architectural Overview, Simon Spero, UNC Sunsite/EIT
URL: http://www.w3.org/hypertext/WWW/Protocols/HTTP-NG/http-ng-arch.html
[Simon3]
Session Control Protocol (SCP), Simon Spero, UNC Sunsite/EIT
URL: http://www.w3.org/hypertext/WWW/Protocols/HTTP-NG/http-ng-scp.html
[Simon4]
Next Generation Hypertext Transport Protocol, Internet Draft, Simon Spero
[Simon5]
Analysis of HTTP Performance Problems, Simon Spero, UNC Sunsite/EIT
URL: http://sunsite.unc.edu/mdma-release/http-prob.html
[KeepAlive]
HTTP 1.0 KeepAlive, NCSA
URL: http://hoohoo.ncsa.uiuc.edu/beta-1.5/howto/KeepAlive.html
[Archive]
HTTP Working Group's E-mail Discussions

각주(Footnotes)

(1)
Method는 브라우저가 서버에게 지정하는 문서 데이타를 어떻게 처리해 달라고 지정하는 것을 말한다. 예를 들어 GET이란 method를 사용한다면 서버가 갖고 있는 문서 데이타를 보내 달라는 뜻이고, DELETE란 method를 사용하면 지정하는 문서를 서버에서 지워달라는 뜻이다. 이처럼 몇 가지 종류의 method를 사용하여 어떤 서버 동작을 명령할 것인지 정의한다. 이런 methods의 종류로는 GET, POST, DELETE, HEAD 등과 같은 것이 있다.