이명헌 경영 스쿨
[테크] HTTP로 나누는 대화
HTTP를 이용한 웹써버와 클라이언트의 대화
이명헌 [ 2000-12-6 ]

리퀘스트 헤더 (Request Header)

transaction웹 브라우져가 웹 써버와 커넥션을 형성하고 문서 요청을 할 때, 어떤 과정이 진행될까요? 사용자가 링크를 클릭했을 때 웹 브라우져는 우선 요청한 페이지의 IP 주소를 찾습니다. 웹 문서 주소를 쳤을 때 원하는 페이지가 뜨는 대신 "Server does not have a DNS entry" 같은 메시지가 뜨는 경우가 IP 주소를 찾아내지 못 했을 때입니다. 일단 IP 주소에 해당하는 웹 써버를 찾았다면 웹 브라우져는 클라이언트 컴퓨터의 IP 주소를 웹 써버에 알려 주면서 웹 써버와 클라이언트 간에 TCP 커넥션을 엽니다. TCP는 "Transmission Control Protocol"의 약자로 인터넷을 전체적으로 묶어주는 네트웍 프로토콜입니다. 자세한 내용은 TCP와 네트웍 프로토콜을 참고 하세요.

웹 써버와 클라이언트(웹 브라우져) 사이에 일단 연결이 형성되면 웹 브라우져는 사용자의 리퀘스트(request)를 웹 써버에 알려 줍니다.이 리퀘스트는 일정한 형태를 갖고 있습니다. 이해를 돕기 위해 사용자가 "www.abc.co.kr/abc.html"이라는 문서에서 "www.xyz.com/xyz.html" 라는 링크를 클릭했다고 합시다. 이 링크를 클릭하는 순간 웹 브라우져는 다음과 같은 리퀘스트를 만들어 냅니다.

Get /xyz.html HTTP/1.0
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
Accept: text/html; */*
Cookie: name = value
Referer: http://www.abc.com/abc.html
Host: www.xyz.com

첫 번째 줄은 "사용하는 프로토콜은 HTTP 1.0 이고, / 디렉토리의 xyz.html 문서를 달라"의 의미입니다. GET은 "method" 중 하나입니다. 자세한 내용은 GET vs POST를 읽어 보세요. 첫 줄 아래에 나오는 줄들을 모두 합쳐서 '리퀘스트 헤더'(request header)라고 합니다. 자세히 살펴 봅시다.

  • User-Agent: 사용자가 이용하고 있는 브라우져가 무엇인지입니다. 위의 경우, 윈도우즈 NT에서 인터넷 익스플로러 6.0을 이용해서 접속하고 있다는 것을 써버에 알려 주고 있습니다.
  • Accept: 써버로부터 받는 데이타 중 어떤 유형(type)의 데이타를 웹 브라우져가 다룰 수 있는지입니다. "text/html"은 문서 중 html 문서를 받을 수 있다는 의미이고 그 옆의 "*/*"는 특정한 유형이 아닌 모든 일반적인 형태를 다 허용한다는 의미입니다. 즉, Accept는 사용자 웹 브라우져에서 처리할 수 있는 마임타입(mime type)을 알려 줍니다.
  • Cookie: 쿠키가 무엇인지는[인터넷] 쿠키(Cookies)를 참고 하세요. Cookie 헤더는 사용자 하드 디스크에 쿠키가 있는 경우 그 쿠키의 이름과 값(name, value)을 읽어 들여서 웹 써버로 전송합니다.
  • Referer: Referer 헤더는 클릭한 링크가 담겨 있는 문서 주소를 웹 써버에 알려 줍니다. 즉, 어디로부터 이 페이지를 접속했는지를 웹 써버에게 알려 줍니다.
  • Host: 사용자가 요청한 주소의 호스트입니다. 즉, 웹 써버 주소입니다. 위의 경우 www.xyz.com입니다.

이외에도 웹 페이지가 수정된 경우 가장 최근 버전의 페이지를 전송해 달라는 요청인 If-Modified-Since와 특정 날짜가 지난 뒤에 특정 페이지나 이미지로의 접속을 차단하는 Expires 헤더가 있습니다.

리스판스 헤더 (Response Header)

apache웹 써버가 위와 같은 요청을 받으면 요청한 클라이언트에게 요청받은 내용과 함께 관련되는 정보를 담고 있는 헤더도 보냅니다. 그것을 리스판스 헤더라고 합니다. 리스판스 헤더는 상태(status) 정보를 담고 있습니다. 상태 정보는 "Found"와 "404 Not Found" 중 하나의 값을 갖습니다. 리스판스 헤더입니다.

HTTP/1.0 200 Found
Date: Mon, 10 Feb 1997 23:48:22 GMT
Server: Apache/1.1.1 HotWired/1.0
Content-type: text/html
Last-Modified: Tues, 11 Feb 2000 22:45:55 GMT

첫 줄은 상태 정보 "status"입니다. 사용자가 요청한 문서가 써버에 있으면, "Found", 못 찾았다면 "404 Not Found"입니다.

  • Date: 요청된 내용을 수행하는 시간과 날짜입니다.
  • Server: 웹 써버의 종류입니다.
  • Content-type: 보내는 문서의 마임타입입니다.
  • Last-Modified: 보내는 문서가 마지막으로 수정된 날짜입니다.

보내는 파일이 html 문서가 아니라면 Content-type 헤더에는 다른 마임타입이 담깁니다. 즉, 하나의 웹 페이지에 담겨 있는 모든 아이템들 각각에 대해서 Content-type이 무엇인지를 알려주고 전송받습니다. 이미지는 이미지별로 html은 html별로.

웹 써버 쪽에서 http 헤더를 어떻게 셋팅하는지에 관련되는 기술적 내용은 [펄] 펄을 이용한 CGI 개발을 읽어 보세요.

지금 계신 곳은: TECH > [테크] HTTP로 나누는 대화