HTTP?
HyperText Transfer Protocol의 줄임말로, HTML과 같은 문서를 전송하기 위한 Application Layer 프로토콜입니다. HTTP는 웹 브라우저와 웹 서버의 소통을 위한 것입니다.
클라이언트-서버 통신에서 HTTP messages 양식에 맞춰 요청을 보내면, 서버도 HTTP message 양식에 맞춰 응답합니다.
HTTP message?
클라이언트와 서버 사이에서 데이터가 교환되는 방식입니다. HTTP messages는 요청(Requests)와 응답(Response)로 구성됩니다.
HTTP messages는 몇 줄의 텍스트 정보로 구성됩니다. (개발자가 메시지를 작성할 필요는 없습니다.)
- start line: 요청이나 상태를 표시합니다. (항상 첫 줄입니다.)
- HTTP headers: 요청을 지정하거나, 메시지에 포함된 본문을 설명하는 집합입니다.
- empty line: 헤더와 본문을 구분하는 빈 줄
- body: 요청과 관련된 데이터나 응답과 관련된 데이터 또는 문서를 포함
요청 (start line, HTTP headers, empty line, body)
start line?
클라이언트가 서버에 보내는 메시지 입니다.
- Get
- Put
- Post
HTTP Method를 나타냅니다. Get method의 경우 리소스를 받아야 하고, Post method는 데이터를 서버로 전송합니다.
ex) 형식
POST / HTTP 1.1
GET / background.png
...
기본 구조를 따릅니다. 헤더 이름, 콜론(:), 값 으로 구성됩니다.
- General headers: 메시지 전체에 적용되는 헤더로, body를 통해 전송되는 데이터와는 관련이 없습니다.
- Request headers: fetch를 통해 가져올 리소스나 클라이언트 자체에 대한 자세한 정보를 포함하는 헤더를 의미합니다. (요청을 구체화 합니다.)
Body
HTTP messages 구조의 마지막에 위치합니다. 일부 요청의 데이터를 업데이트 하기 위해 사용합니다.
- Single-resource bodies
- Multiple-resource bodies
지금은 구체적인 내용보다는 존재를 알아두자..
응답 (Status lines, Headers, Body)
Status line
응답의 첫 줄은 Status line이라고 부르며, 다음의 정보를 포함합니다.
- 현재 프로토콜 버전 ex) HTTP/1.1
- 상태 코드 ex) 200, 302, 404 등
- 상태 텍스트 ex) OK, Not Found 등
문자열, 콜론(:), 값을 입력합니다. 값은 요청에 따라 반응하고 그룹으로 나눌 수 있습니다.
Body
HTTP message 마지막에 위치합니다. 모든 응답에 body가 필요한 건 아닙니다.
- Single-resource bodies(단일-리소스 본문)
- Multiple-resource bodies(다중-리소스 본문)
현재는 존재를 알고 넘어가자..
Stateless
상태를 자지지 않는 경우입니다. HTTP로 클라이언트와 서버가 통신을 주고 받는 과정에서 서버의 상태를 확인하지 않은 경우입니다.
필요에 따라 (쿠키-세션, API 등) 을 통해 상태를 확인합니다. (나중에 추가적인 공부가 필요합니다..)
추가 자료
HTTP messages
클라이언트와 서버 간 데이터 교환 방식입니다.
클라이언트는 (Request)요청하여 서버에서 액션이 일어나게 합니다.
서버는 (Response)응답하여 클라이언트에 답변합니다.
요청과 응답의 구조는 서로 닮아있으며 구조는 위에 정리된 자료와 같습니다.(start-line 등등)
HTTP Request Method
- GET: 특정 리소스의 표시를 요청합니다. GET을 사용하는 요청은 데이터를 받기만 합니다.
- HEAD: GET 메소드의 요청과 동일한 응답을 요구하지만 본문을 포함하지 않습니다.
- POST: 특정 리소스에 엔티티를 제출할 때 쓰입니다.
- PUT: 모든 현재 표시를 요청 payload로 변경합니다.
- DELETE: 특정 리소스를 삭제합니다.
- CONNECT: 식별되는 서버로의 터널을 맺습니다.
- OPTIONS: 리소스의 통신을 설정하는 데 쓰입니다.
- PATCH: 리소스의 부문을 수정하는 데 쓰입니다.