HTTP?
Hypertext Transfer Protocol의 약자로 클라이언트 서버 간 통신을 위한 통신 규칙 세트 또는 프로토콜을 말한다.
특징
- 클라이언트 서버 구조
- 무상태 프로토콜
- 비연결성
- HTTP 메시지
- 단순함, 확장가능
클라이언트 서버구조?
데이터를 저장하고 관리하는 서버 부분과 해당 서버에 접속하여 데이터를 열람하는 클라이언트 부분으로 구성된 네트워크 구조
- Request Response 구조로 클라이언트는 서버에 요청을 보내고 응답을 대기하며, 서버는 요청에 대한 결과를 만들어서 응답한다.
비즈니스 로직, 데이터 등의 정보는 서버에 몰아두고 클라이언트는 반응형 웹 등 사용자에 사용성에 초점을 맞춘다.
클라이언트 서버 구조로 분리함으로써 각각 독립적으로 진화할 수 있는 이점을 얻는다.
무상태 프로토콜?
Stateless
서버가 클라이언트의 상태를 보존하지 않는 것을 말한다.
문맥, 컨택스트를 서버가 보존하지 않고 이를 무상태라고 말한다.
반대되는 개념으로는 Stateful이 있다. 여기서는 클라이언트의 상태를 서버가 보존한다.
- stateful에서는 중간에 서버가 바뀌면 새로 바뀐서버는 클라이언트의 상태를 모르기 때문에 장애가 발생한다. 따라서 항상 같은 서버가 유지되어야한다.
- 하지만 무상태 프로토콜에서는 응답 서버를 쉽게 바꿀 수 있어 서버 증설 (scale out)이 용이하다.
실무에서 모든 것을 무상태로 설계하는 것은 불가능하다. 따라서 상태 유지는 최소한으로 사용하고 최대한 무상태로 설계한다.
예시) 로그인
로그인한 사용자의 경우 로그인했다는 상태를 서버에 유지해야한다. 일반적으로 브라우저쿠키와 서버 세션을 사용해서 상태를 유지한다.
비연결성?
connectionless, 단일 요청 처리 후 바로 연결을 끊는다
- Http는 기본이 연결을 유지하지 않는 모델
- 일반적으로 초 단위 이하의 빠른 속도로 응답
- 실제 서버에서 동시에 처리하는 요청은 매우 작음
- 서버의 자원을 매우 효율적으로 사용가능 (고가용성)
한계
- 매 요청마다 TCP/IP 연결을 새로 맺어야하여(=3 way handshake) 시간이 소요된다.
- 웹브라우저에서 요청하면 html 뿐만아니라 이미지와 같은 수 많은 자원이 함께 다운로드됨. 많은 자원을 다운로드 받을때 마다 매번 연결을 하는 것은 매우 비효율적임
극복
- http 지속연결(persistent connections)로 문제를 해결한다.
- http/2, http/3에서 더 많이 최적화되었다.
HTTP 메시지
공식 스펙
start-line
*(header-field CRLF)
CRLF (엔터)
[message-body]
Start-line
[요청메시지, request line]
구성
method SP(공백) request-target SP HTTP-version CRLF
method: GET, POST, PUT ...
request-target : absolute-path[?query] (절대경로[?쿼리]) (절대경로 = "/"로 시작하는 경로)
[응답메시지, status line]
구성
HTTP-version SP status-code SP reason-phrase CRLF
status-code : HTTP 상태코드, 200, 300 ...
reason-phrase, 이유 문구 : 사람이 이해할 수 있는 짧은 상태코드 설명 글
header-field, HTTP 헤더
구성
field-name: OWS field-value OWS
*OWS : 띄어쓰기 허용
field-name은 대소문자 구분 x
HTTP 전송에 필요한 모든 부가정보를 포함한다.
예시)
메시지 바디의 내용, 크기, 압축, 인증, 요청클라이언트 정보, 캐시 관리정보 등
message-body, HTTP 메시지 바디
실제 전송할 데이터가 들어가는 자리
HTML 문서, 이미지, 영상, JSON, XML 등 모든 데이터 가능
'CS' 카테고리의 다른 글
Web Socket 웹소켓 (1) | 2023.12.28 |
---|---|
Http 상태코드 (1) | 2023.08.01 |
URI (Uniform Resource Identifier) (0) | 2023.05.27 |
인터넷 네트워크 (0) | 2023.05.27 |