18.http 서버

 

# 웹 서버의 이해

- HTTP 프로토콜을 기반으로 웹 페이지에 해당하는 파일을 클라이언트에게 전송하는 역할의 서버.

- HTTP: Hypertext Transfer Protocl의 약자

- Hypertext : 클라이언트의 선택에 따라서 이동이 가능한 조직화된 정보

- HTTP 프로토콜 : Hypertext의 전송을 목적으로 설계된 어플리케이션 레벨의 프로토콜(TCP/IP 기반)

 

- 인터넷 브라우저도 소켓 기반의 클라이언트 프로그램

(웹 서버에 접속을 시도하기 위해서 브라우저 내부적으로 소켓을 생성함!!!!!!)

 

- 브라우저는 서버가 전송하는 HTML문으로 이뤄진 Hypertext를 HTML 문법을 근거로 보기 좋게 변환해서 보여줌

- 웹서버는 HTTP라는 이름의 프로토콜을 기반으로 Hypertext를 전송하는 서버

 

# HTTP(Hypertext Transfer Protocol)

1. 상태가 존재하지 않는 Stateless 프로토콜

1) 클라이언트가 데이터를 요청하면

2) 서버가 클라이언트의 요청에 응답하고

3) 바로 연결을 종료함(”클라이언트의 상태정보를 유지하지 않음”) => Stateless

- 이러한 HTTP의 특징을 보완하고자 "쿠키"와 "세션"이라는 이름의 기술이 개발되어 사용됨.(상태정보의 유지)

 

2. 요청 메시지와 응답 메시지의 구성

- 클라이언트와 웹 서버 사이의 데이터 요청. 데이터 응답 방식은 표준화 되어 있음.

 

- 요청 메시지(클라이언트가 웹 서버에 전달) : HTTP 요청 헤더

 

1) 요청 라인 : 요청방식(요청목적)에 대한 정보가 삽입됨.

(GET : 주로 데이터 요청시 사용 / POST : 주로 데이터 전송시 사용)

반드시 하나의 행으로 구성해서 전송하도록 약속되어 있으므로, 전체 HTTP 요청 헤더 중 첫번째 행을 추출해서 쉽게 요청 라인에 삽입된 정보 확인 가능.

 

2) 메시지 헤더 : 요청에 사용된(응답 받을) 브라우저 정보, 사용자 인증정보 등

HTTP 메세지에 대한 부가적인 정보가 담김.

- 공백라인 : 헤더와 몸제 사이에 한 줄 삽입 되어서 둘을 구분하도록 약속 되어 있음.

 

3) 메시지 몸체 : 클라이언트가 웹서버에게 전송할 데이터가 담기는데, 이를 담기 위해서는 POST 방식으로 요청을 해야 함.

 

- 응답 메시지(웹 서버가 클라이언트에 전달) : HTTP 응답 헤더

 

1) 상태 라인 : 클라이언트의 요청에 대한 결과정보가 담김

 

- 대표적인 상태코드

200 OK : 요청이 성공적으로 처리됨.

404 Not Found : 요청한 파일이 존재하지 않음.

400 Bad Request: 요청 방식이 잘못되었으니 확인요망.

 

2) 메시지 헤더 : 전송되는 데이터의 타입 및 길이정보 등이 담김.

- 공백라인 : 헤더와 몸제 사이에 한 줄 삽입 되어서 둘을 구분하도록 약속 되어 있음.

3) 메시지 몸체 : 클라이언트가 요청한 파일의 데이터가 담김.

 

서버 예제

 

html 예제

 

 

 

 

 

[출처] : 윤성우 저, "열혈강의 TCP/IP 소켓 프로그래밍", 오렌지미디어