- HTTP는 웹 서버와 웹 클라이언트 간에 통신을 위한 프로토콜이다. 서블릿 프로그래밍을 하기 위해서는 HTTP 프로토콜을 어느 정도는 알고 있어야 한다.웹 브라우저는 HTTP 프로토콜에 맞게 요청을 웹 서버에 전송 한다. 이러한 요청과 응답은 크게 세 부분으로 구성되어 있다. 첫 번째는 요청/응답 라인 부분, 두 번째는 헤더 부분, 세번째는 엔티티 바디(Entity Body) 부분이다. 웹 브라우저와 웹 서버 간의 통신은 웹 브라우저의 요청으로부터 시작된다.
웹 브라우저가 웹 서버에 요청을 전달하는 작업은 다음과 같은 절차를 거쳐서 진행된다.
1. 웹 클라이언트(웹 브라우저)는 미리 알려진 포트(보통 80번)로 연결을 시도한다. 연결이 되면 웹 클라이언트는 HTTP 명렁어, 문서 주소, HTTP 버전 정보를 웹 서버에 전달한다. 다음 예는 index.html 문서를 요청하기 위해서 GET 메소드를 사용하는 것을 보여준다.예 - HTTP 요청 라인GET /index.html HTTP/1.0
2. 요청 라인 다음 줄에 웹 클라이언트는 헤더 정보, 구성 정보(Configuration Information), 받아 들일 문서 포맷 등의 정보를 옵션으로 웹 서버에 전달한다. 모든 헤더 정보들으 한 줄에 하나씩 기술되며, 헤더 이름과 값으로 구성된다. 헤더 정보의 끝에는 공백라인을 추가해서 헤더의 끝임을 알려준다.
3. 예 - 헤더 정보
4. User-Agent : Mozilla/2.03Gold(WinNT: I)Accept: text/html, img/gif
5. 요청과 헤더 정보를 보낸 다음에 웹 클라이언트는 추가적인 정보를 웹 서버에 보낼 수 있다. 보통 이런 데이터는 POST방법으로 웹 서버에 전달한다.
웹 클라이언트로부터 요청을 받은 웹 서버는 요청에 맞는 적당한 작업을 수행하고, 응답을 클라이언트로 전달한다. 웹 서버는 클라이언트의 요청에 대해 다음과 같은 세 부분으로 구성된 응답을 웹 클라이언트로 전송한다.
6. 서버의 응답은 HTTP 버전, 상태 코드, 설명으로 구성된 상태 라인을 이용해서 응답한다. HTTP 버전은 웹 서버가 사용하는 HTTP 버전을 의미한다. 상태 코드는 클라이언트의 요청에 따른 서버의 결과를 표현하기 위한 것으로 세 자리 숫자로 표현된다. 다음은 각 상태 코드의 의미이다.
7. 1xx: 정보 | 요청이 받아들여졌고, 처리 중임을 의미한다.
8. 2xx: 성공 | 클라이언트의 요청이 성공적으로 처리 되었음을 의미한다.3xx: 경로 변경 | 요청을 완전히 처리하기 위해 추가적인 액션이 수행되어야 함을 의미한다.4xx: 클라이언트 에러 | 클라이언트의 요청이 문법적으로 틀렸거나, 처리될 수 없음을 의미한다.5xx: 서버 에러 | 정당한 요청을 서버가 처리하지 못함을 의미한다.예 - HTTP 응답 라인HTTP/1.0 200 OK
9. 상태라인 이후에 웹 서버는 자신과 요청된 문서에 대한 정보를 헤더를 통해서 클라이언트에 전달한다. 헤더의 끝은 공백 라인으로 표시한다.
10. 클라이언트의 요청이 성공적으로 수행되었다면, 요청된 자료가 전송된다. 전송되는 자료는 파일 내용이거나, 서블릿/JSP 프로그램의 응답이 될 수 있다.
HTTP GET 메소드
- GET 메소드는 서버의 URI(Uniform Resource Identifiers)에 의해 참조되는 정보를 요청하는 명렁어 이다. 우리가 웹 브라우저에 URL을 기술해서 사이트를 방문하는 경우는 모두 GET 메소드를 사용하는 것이다. 클라이언트의 요청 시에 GET 메소드를 사용하면 엔티티 바디(Entity Body) 부분은 항상 비어 있는 상태로 서버에 전달된다. 웹 클라이언트가 GET 메소드를 이용하면 서버는 상태라인, 헤더, 요청된 데이터로 이루어진 응답을 보내준다.
GET 메소드는 웹 서버에 데이터를 요청하는 경우에 주로 사용되지만, 어떤 경우에는 데이터를 웹 서버에 전송하기 위해서도 사용된다. 이것은 HTML에서 폼(Form)의 method에 GET을 기술하는 경우에 웹 서버로 데이터를 전달하기 위해서 사용될 수 있다. 그러나 GET을 이용해서 데이터를 전송하는 경우 전달되는 데이터의 길이에 한계가 있고, 데이터가 정확하게 전달되는지 검사하는 기능이 없다. GET을 이용해서 데이터를 전송하는 경우에는 이름과 값의 쌍으로 전달된다. 다음 예에서처럼 'month=august&date=24'는 웹 서버에 전달되는 이름과 값의 쌍이다. 이것을 쿼리 스트링(Query String)이라고도 한다. 쿼리 스트링은 '?' 문자 다음부터 '이름=값'의 형태로 되어 있는데, 이것이 여러번 반복될 떄는 구별하기 위해서 '&' 문자를 사용한다. 예 - GET에서 데이터 전송
GET /servlet/birthday?month=august&date24 HTTP/1.0
HTTP POST 메소드
- POST메소드는 클라이언트의 데이터를 웹 서버에 전달하기 위해서 사용된다. 전잘할 데이터는 클라이언트 요청의 엔티티 바디 부분에 포함 시켜서 웹 서버로 전달한다. POST 메소드는 HTML의 폼(Form)에서 method를 POST로 지정하는 경우에 사용된다. 다음은 POST를 사용하는 클라이언트의 요청이다.
예 - 클라이언트 요청
POST /servlet/birthday HTTP/1.0
User-Agent: Mozilla/2.02Gold (WinNT; I)
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
Content-type: application/x-www-form-urlencoded
Content-length: 20
month=august&date=24
'android programming' 카테고리의 다른 글
Shared Preferences (0) | 2010.05.26 |
---|---|
http에 request요청시... redirect 하는 방법... (0) | 2010.03.05 |
문자코드변환 (0) | 2010.03.04 |
커스텀 리스트뷰 다이얼로그에 컨텍스트메뉴리스너 달기.. (0) | 2010.03.04 |
팝업창(Dialog) (0) | 2010.01.24 |