HTTP의 기본
1. HTTP의 기본
1. 모든 것이 HTTP
- HTTP 메시지에 모든 것을 전송
- HTML, TEXT
- IMAGE, 음성, 영상, 파일
- JSON, XML (API)
- 거의 모든 형태의 데이터 전송 가능
TCP로 직접 연결은 거의 없음(게임서버)
- 기반 프로토콜
- TCP: HTTP/1.1, HTTP/2
- UDP: HTTP/3
- 현재 HTTP/1.1 주로 사용
- HTTP 특징
- 클라이언트 서버 구조
- 무상태 프로토콜(스테이스리스), 비연결성
- HTTP 메시지로 통신
- 단순하고 확장 가능
2. 클라이언트 서버 구조
- Request Response 구조
- 클라이언트, 서버를 분리
독립적으로 발전 가능
3. Stateful, Stateless
- Stateful
- 서버가 클라이언트의 이전 상태를 유지
- Stateless
- 서버 확장성 높음(Scale Out)
- 응답 서버를 쉽게 바꿀 수 있다
- 클라이언트가 추가 데이터 전송
최대한 Stateless로 하고 로그인 등 어쩔 수 없는 상황만 Stateful
※ 같은 시간에 딱 맞추어 발생하는 대용량 트래픽(선착순 이벤트, 콘서트 예약, 학과수업)
4. 비연결성
- 장점
- HTTP는 기본적으로 연결을 유지하지않음
- 실제 서버에서 동시에 처리하는 요청은 작음 (모든 클라이언트가 동시에 요청을 하지않음)
- 서버 자원을 효율적으로 사용 가능
- 단점
- TCP/IP 연결을 새로 맺어야함 - 3way handshake 시간 추가
- 사이트 요청시 자바스크립트, css, 이미지 등 많은 자원이 다운로드(비효율적)
- 지속연결 (Persistent Connection)
1개가 아닌 여러개의 메시지 전달과정을 거친 후에 연결을 끊음
5. HTTP 메시지
- Start-line(request-line / status-line)
- request-line(요청 메시지)
-
HTTP 메서드 : GET(리소스 조회), POST(요청 내역 처리), PUT(), DELETE(삭제)
- 요청 대상
- absolute-path?query
- 절대경로 = “/”로 시작하는 경로
request-line = method SP(공백) request taget(path) HTTP-version CRLF
- HTTP 버전
-
- status-line(응답 메시지)
- HTTP 버전
- HTTP 상태 코드 : 성공 실패
- 200 : 성공
- 400 : 클라이언트 요청 오류
- 500 : 서버 내부 오류
- 이유 문구: 글로 코드 설명
- request-line(요청 메시지)
- HTTP header
- header-field = field-name “:” OWS field-value OWS (OWS 띄어쓰기 허용)
- field-name은 대소문자 구분 없음
HTTP전송에 필요한 부가정보(압축, 메시지 바디 내용, 캐시관리, 요청정보)
- 표준 헤더가 너무 많음(임의 헤드 추가 가능)
- HTTP message body
- HTTP 메시지에 모든 것을 전송
- 실제 전송할 데이터(이미지, 영상 글)
댓글남기기