메뉴 건너뛰기


Developer > Network

HTTP 제2장. HTTP 맛보기

2013.11.12 07:18

푸우 조회 수:6909

제2장. HTTP 맛보기
 
실제로 공부해야 할 내용들은 요청시 혹은 응답시 Header의 사용법이 되겠지만 전체적으로 대충 어떤 메시지들이 오고 가는지 이번장에서 알아보도록 하겠습니다.
(숲을 한번보고 나무들을 보는게 이해에 빠를 것 같아서...)
 
1. HTTP 간단하게 맞보기
 
HTTP의 내용을 간단하게 테스트 해보기 위한 가장 좋은 Tool을 telnet명령 입니다.
telnet은 network을 지원하는 거의 대부분의 OS에서 제공하고 있기 때문에 Window나 Linux아무대서나 테스트 하실 수 있겠죠?
 
설명은 Windows에서 테스트한다는 가정하에 설명하도록 하겠습니다.
 
우선 "시작"->"실행"을 클릭해서 입력창에 "cmd"라고 쓰고 엔터를 치세요.
그러면 Command창이 열립니다.
참고로 Windows 95,98,ME는 "cmd"가 아니고 "command"라고 입력하셔야 합니다.
 
Command 창에 다음과 같이 입력합니다.
 
C:\>telnet www.naver.com 80
 
그러면 화면에 다음과 같은 메시지가 잠시 나온 후 화면이 깨끗하게 지워집니다.
 
연결대상 www.naver.com...
 
화면이 깨끗하게 지워진 상태가 telnet에 의해 www.naver.com의 80포트로 연결이 된 상태라는 것을 의미합니다.
여기까지 오면 naver의 웹서버는 클라이언트로부터 HTTP프로토콜의 요청메시지를 받아들이려고 하고 있는 상태가 됩니다.
여기에 HTTP 요청 메시지를 입력하여 보내주면 되는데... 한가지 문제가 있습니다.
windows에서는 telnet의 연결 상태에서 입력하는 글은 화면에 보이지가 않습니다.
그래서 글을 입력해도 정확히 입력되었는지를 확인하기가 어렵죠.
그래서 직접 글을 입력하려하기 보다는 우선은 아래의 글을 복사해서 붙여 넣기를 하십시오.
참고로 command창에 붙여넣기를 할때는 Control+v로는 되지 않습니다.
command창에서 붙여넣기를 하기 위해서는 command창의 제목바의 제일 왼쪽의 Icon을 클릭합니다. 메뉴가 열리면 "편집(E)"에서 "붙여넣기(P)"를 선택합니다.
 
GET / HTTP/1.1
 
 
 
붙여넣기 할때 중요한 것은 글의 끝부분에 엔터가 두번 있다는 것입니다. 만약 화면에 변화가 없으면 command창에 직접 엔터를 치십시오. 이유는 나중에 설명할테니 그냥 해 보세요.
 
이렇게 하면 화면에 글들이 후다닥 지나가죠? 자세히 보면 HTML이라는 걸 알 수 있으실 겁니다.
여기까지 해서 여러분은 가장 가단한 HTTP로 웹서버에 요청 메시지를 보내고 응답으로 HTML을 받아 보신거죠.
 
여기까지만 해도 처음 해보시는 분들은 뭐 신기할 수도 있겠지만 앞으로 지속적으로 공부하면서 반복적으로 테스트 하기 위해서는 몇가지 문제점이 있습니다.
 
첫번째, telnet상태에서 내가 쓴글이 화면에 보이질 않아 정확히 입력했는지 잘 모른다는 점이 있구요.
두번째, 응답 메시지가 너무 길다보니 메시지의 처음부터 끝까지를 command창에서 모두 확인 할 수 없다는 점
세번째, 웹서버에 따라 응답 메시지를 나눠서 보낼 수도 있는데 telnet으로는 첫번째로 보낸 응답메시지만 볼 수 있다는 점을 들 수 있습니다.
 
그래서 HTTP프로토콜을 학습하기 위해 쬐금 더 편리한 프로그램을 제가 한번 짜 보았습니다.
다음은 그 프로그램을 다루는 방법입니다.
 
 
2. HTTP 테스트환경 만들기
 
HTTP프로토콜을 테스트 할 수 있는 프로그램의 이름은 testhttp.exe입니다. 지금 이 게시물에 첨부파일로 올려 놓았습니다. (그냥 간단하게 짠거니깐... 너무 기대하지는 마시길...)
강의를 진행하면서 버그가 있으면 그때 그때 고칠께요.
 
testhttp.exe는 command창에서 사용할 수 있는 프로그램입니다.
우선 프로그램 사용법부터 설명하겠습니다.
 
testhttp <server_name> <port> <requset_file> [<out_file>]
 
server_name: 접속할 서버 IP혹은 도메인주소를 적습니다.(필수)
port: 접속할 서버의 포트번호를 적습니다. 일반적으로 80이겠죠? (필수)
request_file: 요청 Header의 내용이 적혀있는 파일의 경로를 적습니다.(필수)
out_file: 응답 메시지 중 본문을 저장할 파일의 경로를 적습니다.(선택)
만약 out_file을 적지 않으면 본문의 내용이 화면에 출력됩니다.
 
1.절에서 테스트했던 내용을 testhttp로 한번 해 보겠습니다.
우선 작업디렉토리를 하나 생성합니다. 저는 C:\HTTP라고 하겠습니다.
이곳에 첨부된 파일을 다운 받아 놓거나 C:\windows와 같이 path에 잡혀있는 디렉토리에 놓아도 좋습니다.
command창을 열고 작업디렉토리로 이동 합니다.
ex) cd c:\http
 
여기서 메모장을열어 naver.req파일을 생성합니다.
ex) notepad naver.req
 
naver.req파일에 다음의 글을 적고 저장합니다.
 
GET / HTTP/1.1
 
 
 
이제 testhttp를 실행하면 됩니다.
 
 
testhttp www.naver.com 80 naver.req
 
이렇게 실행하면 telnet에서와 마찬가지로 화면에 글자들이 후다닥 지나갈 겁니다.
telnet으로 할때와는 좀 다르게 화면에 html문서의 끝부분까지 잘 나온것을 알 수 있습니다.
 
이번에는 out_file을 지정하고 실행해 보죠.
testhttp www.naver.com 80 naver.req naver.htm
 
이제는 글자들이 후다닥 지나가진 않죠?
대신 아래와 유사한 글이 보일 것입니다.
 
HTTP/1.1 200 OK
Date: Wed, 28 Mar 2007 18:25:06 GMT
Server: Apache
Cache-control: no-cache, no-store, must-revalidate
Pragma: no-cache
P3P: CP="CAO DSP CURa ADMa TAIa PSAa OUR LAW STP PHY ONL UNI PUR FIN COM NAV INT DEM STA PRE"
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=euc-kr
 
이게 바로 응답 헤더 부분입니다.
아까도 나오기는 했지만 html에 밀려 올라가서 볼 수가 없었던 내용입니다.
 
그럼 그 html문자들은 어디로 갔나하면 out_file로 지정했던 naver.htm이라는 파일이 현재 디렉토리에 생겼을 겁니다.
이 파일을 열어 보시면 아까 화면에서 봤던 내용이 들어 있습니다.
뭐 웹브라우저로 열어보셔도 되구요.
 
사실 HTTP의 분석만을 위한거라면 다른 좋은 툴도 많이 있습니다. (nicklib홈페이지 다운로드>일반자료실에도 분석할 수 있는 툴을 올려 놓았습니다.)
하지만, HTTP를 적접 바꿔가며 이것 저것 사용하면서 웹서버가 어떻게 반응하지를 알아볼려면 제가 만든 이 툴이 좋을 듯 싶습니다.
아님 더 좋은 툴이 있으면 소개해 주세요.
 
오늘의 강좌를 마치전에 마지막 주의 사항 한가지...
지금 예제는 그냥 naver.com을 가지고 했지만 HTTP을 다 공부하기 전에는 될 수 있으면 apache나 IIS를 설치해서 본인의 컴퓨터에서 하세요.
뭐 대부분은 별일이 없겠지만...
운영중인 사이트에 이런 저런 테스트하다보면 문제가 생길 수도 있으니깐요.
 
그럼 오늘은 여기까지 입니다.
 
Creative Commons License
Creative Commons License이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
Copyright 조희창(Nicholas Jo). Some rights reserved. http://bbs.nicklib.com