# 웹 서버의 이해
- 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 소켓 프로그래밍", 오렌지미디어
'컴퓨터 기초 > TCP&IP' 카테고리의 다른 글
20.C언어 HTTP 서버 구축하기 (10) | 2020.08.28 |
---|---|
19.C언어 HTTP 서버 구축하기 (표준입출력 이용) (0) | 2020.08.27 |
17.멀티 스레드를 이용한 채팅 서버 (0) | 2020.08.24 |
16.입출력 스트림의 분리에 대한 나머지 이야기 (0) | 2020.08.19 |
15.소켓과 표준 입출력 (0) | 2020.08.19 |