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.
번호 | 분류 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|---|
12 | System/OS | [linux] ProFTPD 타임아웃 설정 | hooni | 2003.04.23 | 13295 |
11 | System/OS | [unix] SUN Solaris 싱글모드.. ㅡ,.ㅡ; | hooni | 2003.04.23 | 12393 |
10 | System/OS | [bios] 시스템 부팅 도중 발생하는 비프음 | hooni | 2003.04.23 | 18627 |
9 | System/OS | [windows] 패스워드를 잊어먹었을때.. | hooni | 2003.04.23 | 17781 |
» | System/OS | HTTP 프로토콜 (브라우저와 웹서버 간의 통신) | hooni | 2003.04.23 | 48946 |
7 | System/OS | [linux] 센드메일 동적릴레이 설치 | hooni | 2003.04.23 | 15689 |
6 | System/OS | [linux] 데스크탑환경(GNOME/KDE) 바꾸기.. | hooni | 2003.04.23 | 12618 |
5 | System/OS | [linux] 웹로그분석기(webalizer) 설치 & 팁 | hooni | 2003.04.23 | 15321 |
4 | System/OS | [linux] 메일서버 세팅정보(sendmail) | hooni | 2003.04.23 | 17872 |
3 | System/OS | [linux] APM(apache, php, mysql) + gd 설치순서.. | hooni | 2003.04.23 | 19317 |
2 | System/OS | [linux] 쉘 환경변수 PS1(프롬프트) | hooni | 2003.04.23 | 13958 |
1 | System/OS | [linux] 콘솔/Xwindow 에서 PC스피커 소리 없애기 | hooni | 2003.04.23 | 16834 |