사진출처
HTTP란?
HTTP는 HyperText Transfer Protocol의 약자이다.
-
HyperText
: 문서와 문서가 링크로 연결되어 있는 문서 체계(HTML 파일)
-
Transfer
: 전송한다는 뜻, 전송에는 보내는 주체와 받는 주체가 있다.
-
Protocol
: 협약, 통신 규약이라는 의미, 물리적으로 떨어진 컴퓨터 끼리 어떻게 HTML파일(HyperText)을 주고 받을지에 대한 약속
HTTP는 인터넷 상에서 클라이언트와 서버가 자원(HTML)을 주고 받을 때 쓰는 통신 규약이다.
HTTP의 특징
1. Request / Response (요청 / 응답)
클라이언트와 서버들은 메시지 교환에 의해 통신한다.
클라이언트(웹 브라우저)에서 서버에게 데이터를 요청(Request)하고 서버는 요청을 처리해서 응답(Response)을 준다.
2. Stateless(상태없음)
HTTP 통신의 매 요청과 응답은 이전 상태를 알지 못 한다. 매 통신마다 필요한 모든 정보를 담아서 요청을 보내야 한다.
따라서, 만일 여러번의 통신(요청/응답)의 진행과정에서 연속된 데이터 처리가 필요한 경우를 위해 로그인 토큰 또는 브라우저의 쿠키, 세션, 로컬스토리지 같은 기술이 만들어졌다.
Request & Response
1. Request 메세지 구조
HTTP 요청은 사실 프론트엔드(클라이언트) 에서 백엔드(서버)에 일(데이터 처리)을 시작하게 하기 위해 보내는 메세지다.
이 메세지의 구조는 크게 세 부분으로 구성되어있다.
사진출처
-
Start Line: 요청의 첫번째 줄, 세 부분으로 구성되어 있음
- HTTP Method: 해당 요청이 의도한 액션을 정의하는 부분
- Request target: 해당 request가 전송되는 목표 url
- HTTP Version: 사용되는 HTTP 버전, 주로 1.1 버전
-
Headers: 해당 요청에 대한 추가 정보(메타 데이터)를 담고있는 부분
- Key: Value 값으로 이루어짐(파이썬의 딕셔너리 형태)
- 담아지는 값들!
- Host: 요청을 보내는 목표(타겟)의 주소(ex. www.apple.co.kr)
- User-Agent: 요청을 보내는 클라이언트의 대한 정보 (ex. chrome)
- Content-Type: 해당 요청이 보내는 메세지 body의 타입 (ex.application/json)
- Content-Length: body 내용의 길이
- Authorization: 회원의 인증/인가를 처리하기 위한 로그인 토큰을 담는 곳
-
Body: 해당 요청의 실제 내용. 주로 Body를 사용하는 메소드는 POST
2. Response 메시지 구조
HTTP 규약에 따른 응답의 구조도 또한 크게 세 부분으로 구성되어있다.
사진출처
-
Start Line: 요청의 첫번째 줄, 세 부분으로 구성되어 있음
- HTTP Version: 요청의 HTTP버전과 동일
- Status Code: 응답 메세지의 상태 코드
- Status Text: 응답 메세지의 상태를 간략하게 설명해주는 텍스트
-
Headers: 해당 요청에 대한 추가 정보(메타 데이터)를 담고있는 부분
- Key: Value 값으로 이루어짐(파이썬의 딕셔너리 형태)
-
Body: 해당 요청의 실제 내용. 가장 많이 사용되는 데이터 타입은 JSON
HTTP Request Methods
해당 메소드들은 프론트엔드(클라이언트)의 입장에서 요청의 의도가 담긴 것이다!
백엔드 입장에서 생각하면 혼란이 올 수 있으니 주의할 것!
1. GET
- 어떤 데이터를 서버로 부터 받아올 때 사용하는 메소드
장바구니에 담은 제품을 조회한다
2. POST
- 데이터를 생성 / 수정 할 때 주로 사용되는 메소드(대부분의 경우 요청에 body가 포함)
장바구니에 맘에 드는 상품을 담는다
3. DELETE
- 특정 데이터를 서버에서 삭제 요청을 보낼때 쓰는 메소드
장바구니에서 제품을 삭제한다
Response Status Codes
200: OK
- 문제없이 요청에 대한 처리가 백엔드 서버에서 이루어지고 나서 오는 응답코드
201: Created
- 무언가가 잘 생성되었을 때에(Successfully Created) 오는 Status Code
400: Bad Request
- 해당 요청이 잘못되었을 때 보내는 Status Code
401: Unauthorized
- 유저가 해당 요청을 진행하려면 먼저 로그인을 하거나 회원가입이 필요하다는 의미
403: Forbidden
404: Not Found
500: Internal Server Error
- 서버에서 에러가 났을 때의 Status Code
보다 더 자세한 HTTP Response Status Codes MDN link