모든 개발자를 위한 HTTP 웹 기본 지식 강의를 공부하고 정리한 글입니다.
HTTP(Hyper Text Transfer Protocol)
- 문서를 전송하는 프로토콜
- 이제는 문서뿐 아니라 HTML, TEXT, 이미지 , 음성, 영상, 파일, JSON 등 모든 형태의 데이터를 전송할 수 있다.
HTTP 특징
- 클라이언트 서버 구조로 동작한다.
- 클라이언트는 서버에
요청(Request)
를 보내고 응답을 올 때까지 기다린다.
- 서버에서는 요청에 대한 결과를 만들어서
응답(Response)
한다.
- 클라이언트는 다시 응답 결과를 열어서 동작한다.
- 무상태 프로토콜(Stateless) 지향
- 서버가 클라이언트의 상태를 보존하지 않는다. 중간에 서버가 변경되어도 통신 가능하다.
- 요청에 매번 이전의 모든 상태값들을 전달해줘야 한다.
- 클라이언트의 수가 폭증해도 서버를 대거 늘리면 해결할 수 있다. (서버의 수평 확장 유리)
- 비연결성(Connectionless)
- 클라이언트와 서버는 요청을 주고 받을때만 연결을 유지한다.
- 기본적으로 연결을 유지하지 않으므로 서버의 자원을 매우 효율적으로 사용할 수 있다.
- HTTP 메시지를 통해서 통신한다.
- 단순하고 확장이 가능하다.
HTTP 메시지
start-line
- 요청:
request-line
- 응답:
status-line
header
body
- 실제 전송할 데이터
- HTML, 이미지, 영상, JSON 등 바이트로 표현할 수 있는 모든 데이터 전송이 가능하다.
HTTP 메시지 예시
-
HTTP 요청 메시지
request-line
= method SP(공백) request-target(PATH=요청하는대상) SP HTTP-version CRLF(엔터)
- HTTP 메서드 =
GET
(리소스 조회)
- 요청 대상:
/search?q=hello&hl=ko
- HTTP 버전:
HTTP/1.1
-
HTTP 응답 메시지
status-line
= HTTP-version SP(공백) status-code SP(공백) reason-phrase CRLF(엔터)
- HTTP 상태 코드:
200
(성공)
400
(클라이언트 요청 오류)
500
(서버 내부 오류)