HTTP는 HyperText Transfer Protocol의 약자로 HTML 문서를 전송하기 위한 Application Layer 프로토콜이다.
이 HTTP의 대표적인 특징은 무상태성(stateless)이다
무상태성은 말 그대로 상태를 가지고 있지 않다는 뜻으로, HTTP로 클라이언트와 서버가 통신을 주고 받는 과정에서 HTTP가 클라이언트나 서버의 상태를 확인하지 않는다.
유저가 클라이언트로 발생시키는 모든 상태를 추적하지 않기에 정보를 저장하는 등의 상태를 저장하려면 다른 방법(쿠키-세션, API 등)으로 상태를 확인해야 한다.
응답이 완료가 되면 클라이언트와 서버의 연결이 끊어지는 특징이다.
HTML 메세지는 클라이언트와 서버 사이 데이터를 주고 받는 방식이며 요청(Requests)과 응답(Responses)으로 나누어진다.
그리고 두 방식은 다음과 같은 구조를 가지고있다.
Request Line
, 응답에선 Status Line
이라고 한다.여기서 startline과 HTTP headers를 합쳐 head라 하고, Payload를 body라 한다.
?
와 쿼리 문자열이 붙는 절대 경로이다. 메소드와 함께 사용한다.POST / HTTP 1.1
GET /background.png HTTP/1.0
HEAD /test.html?query=alibaba HTTP/1.1
OPTIONS /anypage.html HTTP/1.0
GET http://developer.mozilla.org/en-US/docs/Web/HTTP/Messages HTTP/1.1
CONNECT
메소드와 함께 사용할 수 있다.CONNECT developer.mozilla.org:80 HTTP/1.1
OPTIONS
와 함께 별표(*
)로 서버 전체를 표현한다.OPTIONS * HTTP/1.1
User-Agent
, Accept-Type
, Accept-Language
와 같은 Header는 요청을 구체화하며, Referer
처럼 컨텍스트를 제공하거나 If-None
처럼 조건에 따라 제약을 걸 수도 있다.Content-Length
와 같은 헤더는 body
에 적용된다. 만약 body
가 비어있다면 Entity Headers는 전송되지 않는다.Body
요청의 본문은 메세지의 마지막에 위치하며 POST
, PUT
같은 요청에서 데이터를 업데이트하기 위해 사용하며, 나머지 메소드들에선 생략될 수 있다.
이 Body 역시 두 종류로 나눌 수 있다.
chucked
로 되며, 파일은 chuck으로 나뉘어 인코딩된다.