본문 바로가기

PE/Standard

리퀘스트 헤더 (Request Header) & 리스판스 헤더 (Response Header)

웹 브라우져가 웹 서버와 커넥션을 형성하고 문서 요청을 할 때, 어떤 과정이 진행될까? 사용자가 링크를 클릭했을 때 웹 브라우져는 우선 요청한 페이지의 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" 라는 링크를 클릭했다고 하자. 이 링크를 클릭하는 순간 웹 브라우져는 다음과 같은 리퀘스트를 만들어 낸다.


리퀘스트 헤더 (Request Header) & 리스판스 헤더 (Response Header)리퀘스트 헤더 (Request Header) & 리스판스 헤더 (Response Header)


리퀘스트 헤더 (Request Header)

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)

웹 서버가 위와 같은 요청을 받으면 요청한 클라이언트에게 요청받은 내용과 함께 관련되는 정보를 담고 있는 헤더도 보낸다. 그것을 리스판스 헤더라고 한다. 리스판스 헤더는 상태(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 개발을 읽어라.


'PE > Standard' 카테고리의 다른 글

Event  (0) 2006.09.22
DOM (Document Object Model)  (0) 2006.09.22
리퀘스트 헤더 (Request Header) & 리스판스 헤더 (Response Header)  (0) 2006.09.22
로그파일의 Format  (0) 2006.09.22
출력 버퍼링  (0) 2006.09.22
HEADER  (0) 2006.09.22