HTTP 프로토콜 (브라우저와 웹서버 간의 통신)
웹클라이언트-웹서버 간의 통신은 웹클라이언트의 요청으로 부터 시작된다.
다음은 요청에 사용되는 HTTP 포맷이다.
형태 : HTTP 요청 (Web Client; Web Browser - Web Server)
<method><resource identifier><HTTP version><crlf>
(<Header>: <value>) <crlf>
. . . .
(<Header>: <value>) <crlf>
<crlf>
(Entity body)
## 클라이언트가 웹서버에게 요청 하는 절차 ##
1. 웹클라이언트(브라우저)는 미리 알려진 포트(80)로 연결을 시도.
연결이 이루어지면 웹클라이언트는 HTTP 명령어, 문서주소, HTTP 버전 정보를 웹서버에 전달한다.
(예) GET /index.html HTTP/1.0
2. 요청라인 다음 줄에 웹클라이언트는 헤더 정보, 구성 정보(configuration information), 받아들일 문서 포맷 등의 정보를 옵션으로 웹서베에 전달한다.
모든 헤더 정보들은 한 줄에 하나씩 기술되며, 헤더 이름과 값으로 구성된다. 헤더 정보의 긑에는 공백 라인을 추가해서 헤더의 끝임을 알려준다.
(예)
User-Agent : Mozilla/2.03Gold(WinNT; I)
Accept : text/html, img/gif
3. 요청과 헤더 정보를 보낸 다음에 웹클라이언트는 추가적인 정보를 웹서버에 보낼 수 있다. 보통 이 데이터는 POST 방식으로 웹서버에 전달하기 위해서 사용된다.
웹클라이언트로부터 요청을 받은 웹서버는 요청에 맞는 적당한 작업을 수행하고, 응답을 웹클라이언트에 전달한다. 웹브라우저의 요청에 응답하는 서버의 HTTP 포맷은 다음과 같은 형태를 취한다.
<HTTP> <result code> (<explanation>) <crlf>
(<Header>: <value>) <crlf>
. . . .
(<Header>: <value>) <crlf>
<crlf>
(Entity body)
## 클라이언트의 요청 대한 웹서버의 응답 절차 ##
1. 서버의 응답은 HTTP 버전, 상태 코드, 설명으로 구성된 상태 라인을 이용해서 응답한다.
- HTTP 버전 : 웹서버가 사용하는 HTTP 버전
- 상태코드 : 클라이언트의 요청에 따른 서버의 결과를 표현하기 위한 것으로 세자리 숫자로 표현된다.
1xx : 정보 - 요청이 받아들여졌고, 처이중임.
2xx : 성공 - 클라이언트의 요청이 성공적으로 처리되었음.
3xx : 경로변경 - 요청이 완전히 처리하기 위해 추가적인 액션이 수행되어야 함.
4xx : 클라이언트 에러 - 클라이언트의 요청 문법이 틀렸거나, 요청이 처리될 수 없음.
5xx : 서버 에러 - 정당한 요청을 서버가 처리 못함.
- 설명 : 상태 코드를 사람이 읽을 수 있는 간단한 단어로 표시한 것.
(예) 다음의 상태코드 200은 클라이언트의 요청이 성공적임을 의미
HTTP/1.0 200 OK
2. 상태 라인 이후에 웹서버는 자신과 요청된 문서에 대한 정보를 헤더 정보를 통해서 클라이언트에 전달한다. 헤더의 끝은 빈 라인으로 표시한다.
(예)
Date : Tue, 28 Mar 2000 06:18:26 GMT
Server : Apache/1.3.9 (Unix) tomcat/1.0 PHP/3.0.12
Last-Modified : Tue, 21 Sep 1999 02:35:00 GMT
3. 클라이언트의 요청이 성공적으로 수행되었다면, 요청된 자료가 전송된다. 전송되는 자료는 파일 내용이거나, 서블릿 프로그램의 응답일 수 있다.
## 텔넷을 이용한 테스트 ##
다음과 같이 콘솔에서 Telnet 클라이언트를 이용해 HTTP 명령을 테스트할 수 있다.
HTTP의 GET 명령을 이용해 특정 위치의 리소스를 요청하면 해당 리소스(HTML 파일)를 전송한다.
[root@ns root]# telnet hooni.net 80 <┘
Trying 61.84.218.138...
Connected to hooni.net.
Escape character is '^]'.
GET /index.html HTTP/1.0 <┘
Accept: text/html <┘
<┘
HTTP/1.1 200 OK
Date: Thu, 19 Sep 2002 11:08:40 GMT
Server: Apache/1.3.26 (Unix) PHP/4.2.2
X-Powered-By: PHP/4.2.2
Connection: close
Content-Type: text/html
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=euc-kr">
<title>정후니네..</title>
</head>
<frameset rows="0, 1*" border="0">
<frame noresize scrolling="no">
<frame src="./html/main_body.php?page=main" name="real_main_frame" noresize scrolling="auto">
<noframes>
<body bgcolor="white" text="black">
<p>이 페이지를 보려면, 프레임을 볼 수 있는 브라우저가 필요합니다.</p>
</body>
</noframes>
</frameset>
</html>
Connection closed by foreign host.
번호 | 분류 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|---|
49 | System/OS | [linux] 쉘 스크립트에 대한 설명과 예제.. | hooni | 2003.04.23 | 13750 |
48 | System/OS | [linux] 쉘 스크립트 (Shell Script) | hooni | 2003.04.23 | 12387 |
47 | System/OS | [unix] 유닉스 csh에서 환경변수 등록 | hooni | 2003.04.23 | 12054 |
46 | Develop | [css] 스크롤바 안생기게 | hooni | 2003.04.23 | 10133 |
45 | System/OS | [linux] ProFTPD 타임아웃 설정 | hooni | 2003.04.23 | 13317 |
44 | System/OS | [unix] SUN Solaris 싱글모드.. ㅡ,.ㅡ; | hooni | 2003.04.23 | 12423 |
43 | System/OS | [bios] 시스템 부팅 도중 발생하는 비프음 | hooni | 2003.04.23 | 18656 |
42 | System/OS | [windows] 패스워드를 잊어먹었을때.. | hooni | 2003.04.23 | 17802 |
41 | Database | [mysql] DB->Text, Text->DB 변환 | hooni | 2003.04.23 | 12553 |
» | System/OS | HTTP 프로토콜 (브라우저와 웹서버 간의 통신) | hooni | 2003.04.23 | 48984 |
39 | System/OS | [linux] 센드메일 동적릴레이 설치 | hooni | 2003.04.23 | 15715 |
38 | System/OS | [linux] 데스크탑환경(GNOME/KDE) 바꾸기.. | hooni | 2003.04.23 | 12635 |