- 모든 것이 HTTP
- HTTP 특징
HTTP (Hyper Text Transfer Protocol)은 html, text, image, 음성, 영상, 파일, JSON, XML 등 거의 모든 형태의 데이터 전송 가능
HTTP/1.1, HTTP/2 버전은 TCP를 기반으로 사용
HTTP/3 버전은 UDP를 기반으로 사용
현재는 HTTP/1.1을 주로 사용하고 있으나, 성능 개선된 2,3도 점점 증가하고 있다.
클라이언트가 요청 -> 서버가 응답 (request response 구조)
서버와 클라이언트의 구분이 확실해지면서 각각 독립적인 진화가 가능해졌다.
서버가 클라이언트의 상태를 보존하지 않는다. 클라이언트는 요청할 때 필요한 정보를 모두 포함시켜 보내야하고 이로 인해 응답 서버를 쉽게 바꿀 수 있다. 따라서 서버 장애에 대응할 수 있고, 무한히 서버를 수평 확장(증설)할 수 있다. 동시에 대용량 트래픽이 발생하는 경우 무상태성을 잘 유지하는 것이 중요하다. (서버 증설을 통해 대비할 수 있음)
한계 : 로그인과 같이 상태를 유지해야할 때도 있다. 브라우저 쿠키와 서버 세션을 사용해서 상태를 유지하고 상태 유지는 최소한으로 사용
HTTP는 기본적으로 연결을 유지하지 않고 요청과 응답이 처리되면 연결을 끊어서 서버가 유지하는 자원을 최소한으로 한다. 연결을 바로 끊어서 서버가 동시에 처리하는 요청을 수십개 이하로 줄일 수 있고 서버 자원을 효율적으로 사용할 수 있다.
단점 : 자료를 하나하나 받을 때마다 TCP/IP 연결을 맺어야한다. 웹 페이지는 HTML 뿐만 아니라 자바스크립트, css, 추가 이미지 등 수 많은 자원을 다운로드 받아야한다.
지금은 HTTP 지속연결을 통해 문제 해결, HTTP/2, HTTP/3에서 더 많은 최적화
구조
start-line 시작 라인
header 헤더
empty line 공백 라인(CRLF)
message body
start-line
1) 요청 메시지
start-line = request-line
method request-target HTTP-version
ex) GET /search?q=hello&hl=ko HTTP/1.1
2) 응답 메시지
start-line = status-line
HTTP-version status-code reason-phrase
ex) HTTP/1.1 200 OK
header-field
field-name: field-value
ex) Content-Type: text/html;charset=UTF-8
메시지 body
실제 전송할 데이터, byte로 표현할 수 있는 모든 데이터 전송 가능
해당 포스팅은 김영한님의 인프런 강의 "모든 개발자를 위한 HTTP 웹 기본 지식"를 수강하고 배운 내용을 정리한 글입니다.