본 게시글은 인프런 김영한 님의 모든 개발자를 위한 HTTP 웹 기본 지식 을 기반으로 작성되었습니다.
HTTP란 (HyperText Transfer Protocol)의 약어이자 W3 에서 정보를 주고받을수 있는 통신 규약 입니다.
처음에는 HTML 을 주고받는데 사용되었지만, 현재에는 이미지,영상,JSON,XML,서버간의 데이터 등
사실상 모든곳에서 HTTP를 사용하고 있습니다.
HTTP1.1은 무려 15년동안 릴리즈 되었기때문에 극도로 안정되었고 거의 모든기능이 들어가있기 때문에 현재 가장 많이 사용하는 버전입니다. 현재 버전은 RFC7230~7235(2014)
HTTP는 다음과 같은 특징
이 있습니다.
클라이언트 서버 구조
무상태 프로토콜(스테이스리스), 비연결성
HTTP 메시지
단순함, 확장 가능
현재에는 익숙한 클라이언트,서버 구조가 과거에는 개념조차 모호했습니다. 하지만
HTTP 에서 클라이언트는 UI 에 집중을 하고 서버는 응답과 처리에 집중을 하게됩니다.
Stateless 이란 무상태 프로토콜을 의미하고 다음과 같은 특징이 있습니다.
Stateless 는 한번에 받아서 처리하기때문에 중간에 점원이 바뀌어도 상관이 없습니다.
서버1이 마비가 될때 서버 2로 넘겨도 처리가 가능하죠 그렇기 때문에 무한적 수평확장이 가능합니다. 대부분 Stateless 를 최우선적으로 사용합니다.
반면 Stateful 은 데이터를 유지하지만 점원이 바뀌면 처음부터 다시 해야합니다.
즉 서버가 마비되면 처음부터 다시해야 합니다.
따라서 Stateful 은 보통 로그인을 서버에 유지 할때 사용하며
로그인과 같이 필요한경우에만 사용 합니다.
HTTP 는 다음과 같은 특징이 있습니다.
요약을 하자면 TCP/IP 로 연결후 3way handshake 을 할텐데 데이터를 주고 받으면 연결을 끊습니다.
그렇게 되면 많은 사용자가 이용해도 리소스를 다시 확보해서 사용하기 때문에 자원관리가 효율적입니다.
하지만 다음과 같은 한계점이 있습니다.
무언가 할때마다 또 (html,css,js,image) 을 받을때마다 끊고 연결을 반복합니다.
그래서 최근에는 HTTP 지속 연결(Persistent Connections)
을 통해
모든 자원을 받은뒤 연결을 끊습니다.
HTTP/2, HTTP/3(udp)를 사용해서 최적화를 하기도 합니다.
HTTP 는 다음과 같은 구조를 가지고 있습니다.
start-line = request-line
request-line = method
SP(공백) request-target
SP HTTP-version
CRLF(엔터)
(메서드
, 타겟
, HTTP 버전
순으로 들어간다)
메서드의 종류는 다음과 같습니다.
)GET, POST, PUT, DELETE
HTTP Version EX) HTTP/1.1
start-line = status-line
status-line = HTTP-version
SP status-code
SP reason-phrase
CRLF
헤더구조
header-field = field-name
":" OWS field-value
OWS (OWS:띄어쓰기 허용)
헤더에는 HTTP 전송에 필요한 모든 부가정보가 들어있습니다.
실제 HTML 데이터