기반 프로토콜
TCP: HTTP/1.1 , HTTP/2
UDP: HTTP/3
현재는 HTTP/1.1 주로 사용
-> HTTP/2, HTTP/3도 점점 증가
HTTP 특징으로 4가지가 있다.
-클라이언트 서버 구조
-무상태 프로토콜(스테이트리스), 비연결성
-HTTP 메시지
-단순함, 확장 가능
클라이언트 서버구조
클라이언트는 서버에 요청을 보내고, 응답을 대기하는 구조이다.
이때 서버는 요청에 대한 결과를 만들어서 응답을 한다,
무상태 프로토콜(stateless)
서버가 클라이언트의 상태를 보존하지 않음
장점: 서버의 확장성이 높다 ( 스케일 아웃 -수평 확장이라고 한다)
단점: 클라이언트가 추가 데이터를 전송해야 한다.
다만 모든 것을 무상태로 설계할 수 없는 경우도 있다.
예를 들어서 로그인 하는 경우에 로그인 했다는 상태를 서버에 유지를 시켜주어야 한다.
(일반적으로 브라우저 쿠키와 서버 세션등을 사용해서 상태를 유지시켜주는데
상태 유지는 최소한만 사용하게 된다.)
비연결성
HTTP는 기본적으로 연결을 유지하지 않는 모델이다.
웹 브라우저에서 계속 연속해서 검색 버튼을 누르지 않는 것 처럼,
1시간동안 몇천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 작다.
이러한 HTTP의 비연결성은
서버 자원을 매우 효율적으로 사용할 수 있는 특징을 지닌다.
그러나 이러한 비연결성도 단점이 있다.
예컨대 다른 페이지로 넘어갈때 연결이 끊어지면서 TCP/IP연결을 새로 맺어야 하기 때문에
3 WAY HANDSHAKE 시간이 추가된다.
-> 현재는 최적화되어 HTTP 지속연결로 문제 해결함
HTTP 메시지
HTTP 메시지의 구조는 다음과 같다.
start-line 시작 라인 |
header 헤더 |
empty line 공백 라인(CRLF) |
message body |
요청 메시지
GET /search?q=hello&hi-ko HTTP/1.1
요청메시지의 시작 라인은 크게 request-line과 status-line으로 나뉜다.
request-line = method SP(공백) request-target SP HTTP-version CRLF(엔터)
요청메시지(method) - HTTP메서드 같은 경우,
종류는 GET POST PUT DELETE
요청 대상(request-target)
보통 절대 경로로 시작되며 뒤에 query가 있기도 함
HTTP버전
HTTP버전을 넣는다.
응답 메시지
start-line = status-line
status-line = HTTP-version SP status-code SP reason-phrase CRLF
HTTP 버전
HTTP 상태코드 : 요청 성공, 실패를 나타냄
200: 성공
400: 클라이언트 요청 오류
500: 서버 내부 오류
이유 문구: 사람이 이해할 수 있는 짧은 상태 코드 설명 글
HTTP 헤더
HTTP 전송에 필요한 모든 부가정보가 다 들어가 있다.
예를 들어 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트 정보, 서버 애플리케이션 정보, 캐시관리 정보 등등
-표준 헤더가 너무 많음
-필요시 임의의 헤더 추가 가능
header-field = field-name ":" OWD field-vlaue OWS (OWS:띄어쓰기 허용)
-field-name은 대소문자 구분 없음
ex)
요청메시지의 헤더
Host: www.google.com
응답 메시지의 헤더
Content-type: text/html;charset=UTF-8
Content-Length: 3423
HTTP 메시지 바디
실제 전송할 데이터가 들어있음
HTML문서, 이미지,영상 등등이 들어가게 됨
출처 - 김영한님 강의를 듣고 나름대로 정리한 내용입니다.
www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard
'CS > Computer Network' 카테고리의 다른 글
헤더 (0) | 2021.02.26 |
---|---|
HTTP 상태코드 - 1XX, 2XX, 3XX, 4XX, 5XX (0) | 2021.02.25 |
API URI 설계 (0) | 2021.02.24 |
URI와 웹 브라우저 요청 흐름 (0) | 2021.02.23 |
인터넷 네트워크 - IP, TCP, UDP, PORT, DNS (0) | 2021.02.23 |