메뉴 건너뛰기


Developer > Network
틈틈이 강좌를 하다 보니 시간이 너무 지체되는 군요.
우선 설명하기 쉬운것 부터 설명을 미리 써 놓겠습니다. 
 
3. Request Header Fields
 
Request Header Field들은 요청시에만 사용할 수 있는 필드들입니다.
 
1) Athorization (HTTP/1.0)
 
 
 
2) From (HTTP/1.0)
 
요청을 하는 사람의 Email주소는 적습니다. 반듯이 있어야 하는 것은 아니고요. 일반적으로는 사용하지 않습니다. 하지만 웹로봇과 같이 사람이 아닌 기계적으로 접근하는 프로그램은 문제의 소지가 생겼을 시에 이에 대한 대화를 나눠야 할 필요가 있기 때문에 적어 주는 것이 좋겠죠?
예) From: scott@domain.com 
 
3) If-Modified-Since (HTTP/1.0)
 
요청하는 Client가 Cache를 가지고 있는 경우 If-Modified-Since필드에 해당 Cache의 수정된 일자를 보냄으로서 웹서버에게 이 일자보다 이후에 수정되었다면 URI에 요청한 자원을 보내라고 하는 Header입니다. 만약 수정되었거나 이 필드에 적힌 날짜에 오류가 있다면 웹서버는 요청한 URI의 내용을 Message Body에 보내야 하구요. 수정되지 않았다면 상태코드 304 "Not Modified" 을 보내서 변하지 않았다는 것을 Client에 알려주고 실제 내용을 보내지 않아도 됩니다.
단, 여기서 사용할 수 있는 일자의 형식은 제4장 2절 1)항에서 이야기한 Date형식을 사용하여야 합니다.
 
4) Referer (HTTP/1.0)
 
Referer는 현재 URI를 획득했던 이전 URI를 Web Server에 알려주는 역할을 합니다. 예를 들을 a.htm에서 b.htm의 링크를 클릭해서 현재 b.htm을 요청하고 있다면 Referer로 a.htm의 전 URI를 적어 줍니다.
물론 주소창에 직접 b.htm을 입력하여 요청하는 경우는 Referer를 보내서는 안되겠죠?
이를 통해 Web Server를 현재 요청을 어떤 경로로 알고 들어 왔는지 (다르게 말하면 어떤 문서가 현재 URI를 링크하고 있는지)를 알아보거나 잘못된 링크가 어느 Web Page에 걸려 있는지 그리고 현재에서 뒤로 가기를 하기 위한 Page URI를 알 수 있게 하는 데이터가 됩니다.
최근 어떤 사이트를 가보니 자신의 Site에서 브라우징 과정에서 들어온 요청이 아닌 경우는 서비스를 하지 않을 목적으로 사용되는 것을 본적이 있습니다. 뭐 이야기를 시작했으니 어떤 사이트인가를 밝힌다면 Naver에서 개인 홈페이지을 만들 수 있도록 하고 있는데 그곳에 이미지를 올리고 다른 곳에서 링크를 해서 사용하려고 하면 Naver는 이 서비스를 제한했었습니다. 지금도 그러는지는 잘 모르겠네요. 
 
실습을 한번해 보죠. 네이버의 열린사전의 내용을 가져오기 위해 먼저 Referer헤더를 사용해서 가져와 보겠습니다.
요청GET /openkr/dir_list.php?dir_id=4&page=2 HTTP/1.1
HOST: kin.naver.com
REFERER: 
http://kin.naver.com/openkr/dir_list.php?dir_id=3
명령testhttp kin.naver.com 80 kin.txt kin.htm
응답HTTP/1.1 200 OK
...이하생략...
 
이번에는 위와 차이점이라고는 Referer헤더를 사용하지 않았다는 것 뿐입니다.
요청GET /openkr/dir_list.php?dir_id=4&page=2 HTTP/1.1
HOST: kin.naver.com
명령testhttp kin.naver.com 80 kin2.txt kin2.htm
응답HTTP/1.1 200 OK
...이하생략...
위 두 실행결과로 얻은 kin.htm과 kin2.htm파일을 웹브라우져로 열어보세요. 같은 URI에 요청을 했지만 결과가 전혀 다르죠?
 
 
5) User-Agent (HTTP/1.0)
 
제가 지금까지 Client, 웹브라우져와 같이 이야기 했던 것들을 RFC에서는 User Agent라고 이야기 합니다. 줄여서 UA.
이 User-Agent 필드는 사용한 User Agent가 어떤 것인지를 Web Server에게 알려주는 역할을 합니다.
예를 들어 Microsoft의 Internet Exploere는 다음과 유사하게 웹서버에 자신이 어떤 프로그램인지를 알려줍니다. 
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 1.1.4322)
위의 필드값을 통해 Web Server는 현재 요청을 하고 있는 Client가 운영체제는 XP를 사용하고 있으며 .NET 1.x와 .NET 2.x가 설치되어 있는 PC에서 IE7.0을 사용하여 요청을 하고 있다는 정보를 알 수 있습니다.
이를 통해 Web Server쪽에서는 UA별 특성에 따른 서로 다른 서비스를 제공할 수 있습니다.
만약 여러분이 Web Robot을 만든다면 User-Agent에 Robot의 이름과 Version 그리고 From 헤더 필드에 연락할 수 있는 Email을 적어주면 좋겠죠?
 
여러분이 사용하고 있는 웹브라우져의 User-Agent 정보를 알고 싶으세요?
여러분의 웹브라우져가 웹서버에 보낸 메시지를 기대로 보여줍니다.
 
6) Accept (HTTP/1.1)
 
Accept 필드는 클라이언트 즉, UA가 받아서 처리할 수 있는 미디어 타입을 지정해 주는 것 입니다.
 
 
제 컴퓨터의 IE7.0에서는 다음과 같이 요청을 하더군요.
 
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
 
7) Accept-Charset (HTTP/1.1)

 
8) Accept-Encoding (HTTP/1.1)
 
9) Accept-Language (HTTP/1.1)
 
10) Expect (HTTP/1.1)
 
11) Host (HTTP/1.1)
 
이 필드는 굉장히 중요합니다. 그리고 HTTP/1.1 환경에서는 반듯이 요청시 제공하여야 합니다.
예전 HTTP/1.0에서는 이러한 헤더 필드가 없어서 하나의 IP와 하나의 Web Site가 1대1 관계를 갖어야 했습니다. 이는 하나의 IP만 갖고 있는 한대의 서버 컴퓨터는 Web Site의 규모가 크든 작든 하나의 웹서비스 밖에 할 수 없었다는 것을 의미하죠. 하지만 HTTP/1.1에서는 IP가 하나이더라도 이 Host 헤더 필드에 제공되는 값에 의해 서비스를 구별할 수 있게 합니다. 이걸 Apache Web Server에서는 Virtual Host(가상 호스트)라고 이야기 합니다.
그래서 초기 접속을 A라는 주소로 접속하더라도 Host헤더를 제공하지 않으면 어뚱한 Web 페이지가 오거나 아예 안올 수도 있습니다.
이 Virtual Host기능에 의해 웹호스팅 업체가 사업을 할 수 있는 거죠.
 
여러분도 아시는 가비아의 웹사이트로 실습을 한번 해보죠.
테스트 대상 URL은 http://www.gabia.com과 http://hosting.gabia.com 이다.
cmd창에서 ping에 의해 위 두 도메인의 IP를 한번확인해 보세요.
c:\>ping www.gabia.com
Pinging www.gabia.com [211.115.83.214] with 32 bytes of data:
Reply from 211.115.83.214: bytes=32 time=3ms TTL=52
 
c:\>ping hosting.gabia.com
Pinging hosting.gabia.com [211.115.83.214] with 32 bytes of data:
Reply from 211.115.83.214: bytes=32 time=3ms TTL=52
위에서 보는 것과 같이 IP가 서로 같습니다.
하지만 웹브라우져로 접속해 보면 서로 다른 화면을 보여줍니다.
 
요청GET / HTTP/1.1
HOST: www.gabia.com
명령testhttp hosting.gabia.com 80 gabia.txt gabia.htm
응답HTTP/1.1 200 OK
...이하생략...
위의 실습을 한번 해보시고 gabia.htm을 웹브라우져로 열어 보세요. hosting.gabia.com의 내용이 담겨있는지 아니면 www.gabia.com의 내용이 담겨있는지 확인하세요.
HOST 헤더 필드가 얼마나 중요한지 아시겠죠?

 
12) If-Match (HTTP/1.1)
 
 
13) If-None-Match (HTTP/1.1)

 
14) If-Range (HTTP/1.1)
 
15) If-Unmodified-Since (HTTP/1.1)

 
16) Max-Forwards (HTTP/1.1)
 
17) Proxy-Authorization (HTTP/1.1)

 
18) Range (HTTP/1.1)
 
19) TE (HTTP/1.1)
 
 
 
Creative Commons License
Creative Commons License이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
Copyright 조희창(Nicholas Jo). Some rights reserved. http://bbs.nicklib.com