이 글은 MDN documentation 을 정리한 글입니다.
HTTP (Hyper Text Transfer Protocol)
은 www 상에서 문서를 주고받는 프로토콜로써, TCP, UDP를 사용하며, 80
포트를 사용합니다.
HTTP/1.1에서는 클라이언트가 요청을 보내면 서버가 응답을 보내주는 구조이며, 이를 HTTP메시지
라고 합니다. 메시지 타입은 클라이언트가 서버로 전달해서 서버의 액션이 일어나는 요청 메시지 (Request)
와 서버가 답변하는 응답 메시지(Response)
로 구성되어 있습니다.
HTTP 메시지는 ASCII로 인코딩된 텍스트 정보이며, 이러한 메세지는 설정파일 (프록시, 서버) 혹은 API (브라우저 경우) 혹은 다른 기타의 인터페이스에 의해 가공되어 제공됩니다.
HTTP 요청 및 응답 메시지 구조는 다음과 같이 형성되어 있습니다.
- 시작줄(start line) - 실행해야 할 요청 및 요청 수행에 대한 결과가 기록됩니다.
- HTTP 헤더 세트 - 옵션으로써 요청에 대한 설명 및 본문(body)에 대한 설명이 기록됩니다.
- 빈줄 (blank line) - 요청에 대한 모든 메타정보가 전송되었음을 알립니다.
- 본문(body) - 요청과 관련된 내용 혹은 문서 (document)가 포함됩니다.
HTTP 요청 구조
시작줄 (start line)
- HTTP 메서드
동사(GET, PUT, POST)
혹은 명사 (HEAD, OPTIONS)
를 사용하여 서버가 수행해야 할 동작들을 나타냅니다. 메서드에 대한 간략한 내용은 다음과 같습니다.
- OPTIONS - 요청 URL에 어떠한 메서드를 요청 가능한지 확인합니다.
- HEAD - GET과 비슷하나, 응답 Header만 받습니다.
- GET - 리소스를 클라이언트로 가져옵니다.
- POST - URL에 새로운 데이터를 보냅니다.
- PUT - URL에 저장된 정보를 보냅니다.
- DELETE - URL에 저장된 리소스를 삭제합니다.
- TRACE - 보낸 메세지를 다시 받습니다.
- CONNECT - 프록시에 사용되는 예약 메서드입니다.
- 요청 타겟
주로 URL, 프로토콜, 포트, 도메인의 절대 경로로 나타낼 수 있으며, 이는 요청 컨텍스트에 따라 결정됩니다. 요청 타겟 포맷은 HTTP 메서드에 따라 달라집니다. 포맷 종류는 다음과 같습니다.
- origin 형식: 끝에
?
와 쿼리 문자열이 붙는 경로입니다. 사용되는 메서드는GET, POST, HEAD, OPTIONS
입니다.
ex) POST / HTTP 1.1 GET /background.png HTTP/1.0 HEAD /test.html?query=alibaba HTTP/1.1
- absolute 형식: 완전한 URL 형식이며, 프록시에 연결하는 경우 대부분
GET
과 함께 사용됩니다.
ex) GET http://www.xxx.com HTTP/1.1
- authority 형식: 도메인 이름 및 옵션 포트
(:)
가 붙습니다. authority component이며, HTTP 터널을 구축하는 경우에만CONNECT
와 함께 사용 가능합니다.
ex) CONNECT developer.mozilla.org:80 HTTP/1.1
- asterisk 형식:
OPTIONS
와 함께 별표(*)
하나로 서버 전체를 나타냅니다.
ex) OPTIONS * HTTP/1.1
헤더 (Header)
- general 헤더 -
Via, Connection
등의 내용이 포함됩니다. - Request 헤더 -
User-Agent
,Accept-Type
과 같은 헤더로써 요청의 내용을 좀더 구체화 시키며, 컨텍스트를 제공하기도 합니다. (Referrer) - Entity 헤더 -
Content-Length
와 같이 본문이 적용된 내용에 관련된 헤더 입니다.
본문 (Body)
본문은 요청의 마지막 부분에 삽입되며, GET
, HEAD
, DELETE
, OPTIONS
와 같이 리소스를 가져오는 요청은 본문이 필요없습니다.
일부 요청은 업데이트를 하기 위해 서버에 데이터를 전송하는데, 보통 POST
요청일 경우 Body를 포함하고 있습니다.
- 단일-리소스 본문(single-resource bodies) -
Content-Type
혹은Content-Length
로 정의된 단일 파일을 구성합니다. - 다중-리소스 본문(multiple-resource bodies) - 멀티파트 본문으로 구성되는 내용으로써, 보통 HTML폼 데이터와 관련있습니다.