jini
2004-03-29 15:51:45.0
0
15281

[강좌]HTTP 1.1 Method


HTTP 1.1 Method(2004/3/28)

JLab jini(허원진)

 

HTTP(Hyper Text Transfer Protocol)은 브라우져와 웹 서버와의 대화를 위해서 메소드를 제공하고 있다. 필자가 알고 있는 HTTP의 메소드는 GET과 POST 이 두 가지이다. 하지만 HTTP에는 이 보다 많은 메소드가 존재한다. 어떤 메소드들이 존재하는지 알아보고 중요한 메소드에 대해서는 자세히 알아보자.

이 기사는 학교 과제를 위해 만든 기사이다.(실제로 필자는 자신의 글을 학교 과제에 Copy&Paste했다는 이유로 과제와 관련해서 상당한 불이익을 받았다. 이러한 문구를 삽입하는 고충을 알아주기 바란다.)

 

HTTP 1.1

필자가 알고 있는 메소드는 GET, POST 두 가지라고 했다. 실제로 1.1 전에는 GET, POST, HEAD 3가지의 메소드만 존재했다. 1.1 스펙에서 추가된 것이다. 이 스펙은 누가 만들까? 아래의 표1은 W3C(World Wide Web Consortium)이 현재 하고 있는 일이다. 웹과 관련해서 모든 일을 하고 있다. 웹 = W3C일 정도 이다.

표1 W3C가 하는일

현재 우리가 쓰고 있는 HTTP 1.1의 메소드에는 어떤 것이 있을까? w3c.org의 스펙 문서를 참조하는 것이 가장 현명하다. 다음은 ftp://ftp.isi.edu/in-notes/rfc2616.txt를 바탕으로 정리한 것이다. 표2에서 굵게 표시된 메소드는 1.1 이전 부 터 존재하던 메소드이다. 앞으로 우리가 관심을 가질만한 메소드에 대해서 자세히 알아볼 것이다.

이름 내용
OPTIONS Request와 Response 관계 정의
GET Entity Body로 정보 요청
HEAD 서버 정보 요청
POST 바디에 포함된 정보 요청
PUT 바디의 정보를 URI로 보냄
DELETE 특정 자원 삭제
TRACE 요청이 최종 수신까지 도달하는 과정 조사
CONNECT 터널을 형성하고 다이나믹하게 바꾸기위한 프락시 지원

HTTP 서버(웹서버)와 대화하기

웹서버와 대화를 하기 위해서는 TCP/IP 프로토콜이 설치되어있는 머신이 필요하다. HTTP는 TCP/IP를 기반으로 하고 있다. 필자가 PC(Personal Computer)가 아니라 머신이라고 하는것은 요즘 다양한 기기에 인터넷 기능이 들어 있기 때문이다. 냉장고, PDA, Cellular Phone ... 등등에 TCP/IP 프로토콜이 설치되어 인터넷을 하고 있다. 여러분이 사용하는 머신에는 TCP/IP 프로토콜이 설치되어 있을까? 이 글을 볼 수 있다는 것이 하나의 증명이 된다. 그림1은 필자의 정보이다. 다행히(?) TCP/IP가 설치되어 있다.

그림1 네트워크 정보

 

필요한 프로토콜 존재는 확인했다. 이제 TCP/IP를 통해서 대화할 수 있는 클라이언트 프로그램만 있으면 된다. 대표적으로는 인터넷 브라우저가 있지만, 다양한 정보를 조작해서 보내기에는 불편하다. 따라서, Telnet과 같은 프로그램이 가장 적당하다. 만일 여러분이 텔넷 명령으로 그냥 접속을 시도했다면 다음과 같은 로그인 화면을 보게 된다. 왜냐하면 텔넷 프로그램은 기본적으로 23 포트로 접속을 시도하기 때문에 HTTP가 아닌 Telnet 프로토콜로 접속을 시도한다. 따라서 80포트를 이용해서 접속을 해야한다.

그림2 텔넷

telnet www.jlab.net 80

GET /index.html HTTP/1.1
Host:
www.jlab.net

HTTP/1.1 200 OK
Date: Sun, 28 Mar 2004 07:14:39 GMT
Server: Apache/1.3.27 (Unix) mod_jk/1.2.4 mod_throttle/3.1.2 PHP/4.3.4
X-Powered-By: PHP/4.3.4
Transfer-Encoding: chunked
Content-Type: text/html

2ff
<html><head><meta name="keywords" content="Eclipse, SWT, PDE, JLab, JAVA, Jsp, S
ervlet, WEB, J2EE, J2ME, 제이랩, 이클립스, 자바, 강좌, 스터디, 사진관"><meta htt
p-equiv="content-type" content="text/html; charset=euc-kr"><title>이클립스 한국
사용자 모임&자바 솔루션 포럼</title></head>
<frameset rows="72,92%" border="0">

<frame src="/next/main1.jsp?action=default" scrolling="no" marginwidth="0" m
arginheight="0" name="main1" target="main">
<frame src="/next/main.htm" mar
ginwidth="0" marginheight="0" name="main" scrolling="AUTO" target="_self"> <
noframes> <body bgcolor="white" text="black" link="blue" vlink="purple" alink
="red"> <p>이 페이지를 보려면, 프레임을 볼 수 있는 브라우저가 필요합니다.</p>
</body> </noframes></frameset></html>
0



호스트에 대한 연결을 잃었습니다.

http 프로토콜은 사용자의 입력을 되돌려주는 에코 기능이 없기 때문에 여러분이 입력한 문자는 화면에서 볼 수가 없다. 이야기와 같은 통신 프로그램을 사용하면 좀 더 편할 것이다. 위 화면은 www.jlab.net에 있는 index.html을 GET으로 요청한 결과를 받은 것이다. 즉 index.html의 내용을 볼 수 있다. 여기서 재미있는 것은 한가지 요청 후에 바로 연결이 끊어진다는 것이다. 이것은 HTTP 비연결성의 특징이다. 웹서버가 모든 메소드에 대해서 응답을 하는 것은 아니다. 실제로 제이랩의 웹서버는 1.1에 추가된 대부분의 메소드에 대한 응답이 없다. 서버 설정 문제로 보인다. 따라서 www.w3c.org 로 테스트를 해보기를 바란다.

OPTIONS

telnet www.w3c.org 80

OPTIONS /index.html HTTP/1.1
Host:
www.w3c.org

HTTP/1.1 200 OK
Date: Sun, 28 Mar 2004 07:31:35 GMT
Server: Apache/1.3.28 (Unix) PHP/4.2.3
P3P: policyref="http://www.w3.org/2001/05/P3P/p3p.xml"
Cache-Control: max-age=21600
Expires: Sun, 28 Mar 2004 13:31:35 GMT
Content-Length: 0
Allow: GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, PATCH, PROPFIND, PROPPATC
H, MKCOL, COPY, MOVE, LOCK, UNLOCK, TRACE



호스트에 대한 연결을 잃었습니다.

OPTIONS 메소드를 통해서 서버가 지원하는 모든 메소드를 볼 수 있다.

TRACE

telnet www.w3c.org 80

TRACE /index.html HTTP/1.1
Host:
www.w3c.org

HTTP/1.1 200 OK
Date: Sun, 28 Mar 2004 07:37:21 GMT
Server: Apache/1.3.28 (Unix) PHP/4.2.3
Transfer-Encoding: chunked
Content-Type: message/http

51
TRACE /index.html HTTP/1.1
Host: www.w3c.org
X_Fwd_IP_Addr: 219.248.234.145


0



호스트에 대한 연결을 잃었습니다.

C:\Documents and Settings\jini>ipconfig

Windows IP Configuration


Ethernet adapter 로컬 영역 연결 3:

Media State . . . . . . . . . . . : Media disconnected

Ethernet adapter 로컬 영역 연결:

Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : 219.248.234.145
Subnet Mask . . . . . . . . . . . : 255.255.255.224
Default Gateway . . . . . . . . . : 219.248.234.129

C:\Documents and Settings\jini>

TRACE 메소드를 통해서 특정 URI가 자신의 머신으로 오는 경로를 알 수 있다. 위의 예에서는 직접적으로 w3c.org서버를 통해서 오고 있지만 분산 서버나 파이어월, 프락시서버등을 거칠 경우 경로가 많아질 수 있다.

POST

다음은 POST 메소드에 대해서 알아보자 POST 메소드가 GET 메소드와 다른것은 BODY이용해서 데이터를 전달한다는 것이다. 실제로 POST이용해서 로그인을하는 제이랩 로그인 페이지를 팩킷 모니터링 해서 자세히 알아보자.

 

 

 

그림3 제이랩 로그인 페이지

그림3은 제이랩의 로그인 페이지이다. 서블릿에 로그인 정보(아이디와 페스워드)를 POST 방식으로 전달하고 있다.

그림4 로그인 팩킷

단순한 작업에 상당한 팩킷이 오가는 것에 놀라울 것이다. 자세한 것은 데이터통신 서적을 참고하고 반전된 부분만 중심적으로 보도록 하자. 첫 번째 반전에서 서버의 특정 URI에 POST 방식으로 요청하고 있다는것을 알 수 있다. 이 글 전반적으로 URI라는 말을 쓰고 있는데 오타가 아니다 공식 용어가 URL(Uniform Resource locator)에서 URI(Uniform Resource Identifier)로 바뀌었다. URN과 URL모두 URI로 부르면 된다. 하지만 헤더 부분을 통해서는 어떤한 데이터가 전달되었는지 알 수 없다. Body를 통해서 전달되기 때문이다. 팩킷의 바디 부분을 보면 실제 전달된 데이터를 볼 수가 있다. POST 방식을 사용한다고 보안 문제가 전혀 해결되는것은 아니다 팩킷 모니터링만 하면 어떤 데이터든지 볼 수가 있기 때문이다. SSL(Secure Sokets Layer)을 사용하기를 권한다.


www.jlab.net

컨텐츠는 JPL에 의해서 보호 받습니다. 오탈 자나 건의는 이곳에 해주십시오

 
0
0
  • 댓글 0

  • 로그인을 하시면 댓글을 등록할 수 있습니다.