1. HTTP에 대해
HTTP란 Hyper Text Transfer Protocol : HTML을 전송하는 프로토콜. 지금은 모든 것을 HTTP로 전송을 한다
(HTML, TEXT, IMAGE, 음성, 영상, 파일, JSON, XML, API 등)
- HTTP 특징
- 클라이언트 서버 구조
- 무상태 프로토콜(스테이스리스), 비연결성
- HTTP 메시지
- 단순함, 확장 가능
2. 클라이언트 서버 구조
- 클라이언트와 서버는 Request Response 구조
- 클라이언트는 서버에 요청을 보내고 응답을 대기
- 서버가 요청에 대한 결과를 만들어서 응답함
- 클라이언트는 서버에대한 응답을 받아 사용자의 요청을 실행함
3. Stateful, Stateless
무상태 프로토콜 스테이스리스
- 서버가 클라이언트의 상태를 보존하지 않음
- 장점 : 서버 확장성 높음 (스케일 아웃)
- 단점 : 클라이언트 추가 데이터를 전송함
Stateful 은 상태를 유지하는 것, Stateless는 상태를 유지하지 않는 것
상태유지 : 클라이언트 요청이 많아지거나 서버가 바뀌는 것에 대해 취약
: 항상 같은 서버가 유지되어야 한다. (서버가 고장나면 바꾸기 쉽지 않음)
무상태 : 갑자기 클라이언트 요청이 증가해도 서버를 대거 투입할 수 있다
: 무상대는 응답 서버를 쉽게 바꿀 수 있다. -> 서버 증설 가능
무상태의 한계
- 무상태 : 로그인이 필요 없는 단순한 서비스 소개 화면
- 상태 유지 : 로그인
- 로그인한 사용자의 경우 로그인 했다는 상태를 서버에 유지
- 일반적으로 브라우저 쿠키와 서버 세션등을 사용해서 상태 유지
- 상태 유지는 최소한만 사용
4. 비 연결성(connectionless)
연결을 유지하는 모델의 경우 서버와 클라이언트가 한번 연결을 하게되면 따로 통신이 없더라도 계속 연결을 유지하게 된다.
반면 연결을 유지하지 않는 모델의 경우 클라이언트의 요청에 대해 서버의 응답을 받으면 연결이 끊긴다.
연결을 유지하지 않게되면 서버입장에서 자신의 자원을 클라이언트와 요청에대한 응답만 주고 서버를 끊기 때문에
최소한의 자원만을 쓸 수 있게된다.
- HTTP는 기본이 연결을 유지하지 않는 모델
- 일반적으로 초 단위 이하의 빠른 속도로 응답
- 일정 시간동안 많은 사람이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 적어진다.
- 서버 자원을 매우 효율적으로 사용할 수 있음
비연결성의 한계(단점)
- TCP/IP 연결을 새로 맺어야 함 - 3 way handshake 시간 추가
- 웹 브라우저로 사이트를 요청하면 HTML 뿐만 아니라 자바스크립트, css 등 수많은 자원이 함께 다운로드 됨
- 지금은 HTTP 지속 연결(Persistent Connections)로 문제 해결

스테이스리스로 잘 설계하면 같은 시간에 딱 맞추어 발생하는 대용량 트래픽이 발생해도 어느정도 대처할 수 있다.
(하지만 이게 매우 어렵다)
5. HTTP메시지
HTTP메시지는 아래 표처럼 이루어져 있다
start-line 시작라인 |
header 헤더 |
empty line 공백라인 (CRLF) |
message body |
아래 표는 HTTP응답 메시지의 예다
HTTP/1.1 200 OK |
Content-Type:text/html;charset=UTF-8 Content-Length:3423 |
<html> <body> ..... </body> </html> |
HTTP 상태 코드 : 요청 성공 혹은 실패를 나타냄
- 200 : 성공
- 400 : 클라이언트 요청 오류
- 500 : 서버 내부 오류
- 이유 문구 : 사람이 이해할 수 있는 짧은 상태 코드 설명 글
HTTP 헤더의 용도
- HTTP전송에 필요한 모든 부가정보
- 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트 정보, 서버 애플리케이션 정보...등등
HTTP메시지 바디의 용도
- 실제 전송할 데이터
- HTML 문서, 이미지, 영상, JSON 등 byte로 표현할 수 있는 모든 데이터 전송 가능
'공부기록 > http 웹 기본 지식' 카테고리의 다른 글
6. HTTP 일반 헤더 (0) | 2022.03.22 |
---|---|
5. HTTP 상태 코드 (0) | 2022.03.21 |
4. HTTP 메서드 (0) | 2022.03.19 |
2. URI와 웹 브라우저 요청 흐름 (0) | 2022.03.17 |
1. 인터넷 네트워크 (0) | 2022.03.16 |