HTTP란?
HTTP - HyperText Transfer Protocol
현재 다양한 버전이 있지만 HTTP/1.1 버전을 가장 많이 사용하며, 가장 중요한 버전이다.
이후의 HTTP/2와 HTTP/3는 성능 개선에 초점을 맞춤
HTTP의 특징
1. HTTP 메시지에는 거의 모든 것을 전송할 수 있다.
- HTML, TEXT
- IMAGE, 음성, 영상, 파일
- JSON, XML (API)
- 거의 모든 형태의 데이터 전송 가능
- 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용.
2. 클라이언트 서버 구조
- 클라이언트가 서버에 요청을 보내고, 서버가 응답을 해주는 Request Response 구조
3. 무상태(stateless) 프로토콜
- 서버가 클라이언트의 상태를 보존하지 않음 => 무슨 의미지? 아래의 예시를 보자
예시) 상태 유지(stateful) VS 무상태(stateless)
무상태의 장점은 중간에 점원이 바뀌어도 상관이 없어짐. 갑자기 고객이 증가해도 점원을 대거 투입 가능.
즉, 클라이언트의 요청이 갑작스레 늘어나도 서버를 대거 투입할 수 있다 -> 무한한 서버 증설 가능
무상태의 단점은 모든 것을 무상태로 설계할 수 없음(로그인 상태 유지). 이런 경우 브라우저 쿠키와 서버 세션을 홯용.
4. 비연결성(connectionless)
- 서버에 수천 명이 접속하고 있어도 실제 서버에서 동시에 처리하는 요청은 수십 개 이하다.
- 웹브라우저에서 계속 버튼을 누르지는 않기 때문.
- 연결을 유지하지 않음으로써 서버 자원을 효율적으로 사용할 수 있게 됨.
- 단, 매번 TCP 연결을 새로 맺어야 하기 때문에 속도가 느려질 수 있음 -> 지속 연결로 문제 해결
HTTP 메시지 구조
start-line :
요청일 때:
method에는 GET, POST, PUT, DELETE... 등이 있음
request-target : absolute-path[?query] (절대경로[?쿼리])
응답일 때:
status-code : HTTP 상태코드( 200: 성공, 400: 클라이언트 요청 오류, 500: 서버 내부 오류)
reason-phrase : 이유 문구(사람이 이해할 수 있는 짧은 상태코드 설명 글)
HTTP 헤더
- 구조:
- HTTP 전송에 필요한 모든 부가정보(메시지 바디의 내용, 바디의 크기, 압축, 인증, 요청 클라이언트 정보, 서버 애플케이션 정보, 캐시 관리 정보 등..)
HTTP 메시지 바디
- 실제 전송할 데이터
- HTML 문서, 이미지, 영상, JSON 등 byte로 표현할 수 있는 모든 데이터 전송 가능
-----------------------------------------
참고 : 인프런 김영한님 강의(모든 개발자를 위한 HTTP 웹 기본 지식)
댓글