✅ HTTP?
HTTP(HyperTextTransferProtocol)는 컴퓨터들끼리 HTML파일을 주고받을 수 있도록 하는 소통방식 또는 약속이다.
- HyperText : 문서와 문서가 링크로 연결되어 있음을 뜻한다.
- Transfer : html로 만든 웹페이지 문서(파일)를 보낸다.
- Protocol : 컴퓨터끼리 어떻게 html 파일을 주고 받을지에 대한 소통 방식 또는 약속.
✅ HTTP 두가지 특징
1. Request / Response(요청/응답)
소통의 핵심은 요청과 응답이다. 인간의 소통방식이 컴퓨터끼리의 소통 방식에도 적용된 것이다. 말이 아닌 메시지의 형식으로 요청하고 응답한다.
2. Stateless(상태 없음)
HTTP 개별통신은 모두 독립이어서 과거의 HTTP 통신의 결과(상태)를 보존하지 않는다. 매 통신마다 사전에 필요한 모든 정보를 담아서 요청을 보내야만 한다.
만일 여러번의 통신(요청/응답)의 진행과정에서 연속된 데이터 처리가 필요한 경우(ex. 온라인 쇼핑몰에서 로그인 후 장바구니 기능)를 위해 로그인 토큰 또는 브라우저의 쿠키, 세션, 로컬스토리지 같은 기술이 만들어졌다. 예를 들어 데이터 요청 시 토큰에 정보를 담아 서버에 전달하면, 서버는 토큰에 담긴 정보를 보고 유저가 맞는지 판단 후에 응답하게 된다.
✅ HTTP 메시지 구조
1. Request 메시지 구조
HTTP 요청은 프론트엔드(클라이언트) 에서 백엔드(서버)에 일(데이터 처리)을 시작하게 하기 위해 보내는 메세지다.
1. Start Line : 요청의 첫번째 줄.
- HTTP Method : 해당 요청이 의도한 액션을 정의하는 부분. 주로
GET
, POST
, DELETE
가 많이 쓰인다.
- Request target : 해당 request가 전송되는 목표 url이다.
- HTTP Version : 말 그대로 사용되는 HTTP 버전을 뜻한다. 주로 1.1 버전, 2.0 버전이 쓰이고 있다. 어떤 버전이 얼마나, 어느나라에서 많이 쓰이는지는 주기적으로 확인하자.
GET /login HTTP/1.1
2. Headers : 해당 요청에 대한 추가 정보(메타 데이터)를 담고있는 부분이다.
- Key : Value 값으로 되어있다(JavaScript의 객체, Python의 딕셔너리 형태라고 보면 된다).
- Host : 요청을 보내는 목표(타겟)의 주소. 즉, 요청을 보내는 웹사이트의 기본 주소가 된다.
- User-Agent : 요청을 보내는 클라이언트의 대한 정보다.
- (ex. chrome, firefox, safari, explorer)
- Content-Type : 해당 요청이 보내는 메세지 body의 타입이다.
- Content-Length : body 내용의 길이.
- Authorization : 회원의 인증/인가를 처리하기 위해 로그인 토큰을 Authroization 에 담는다. 토큰이 있어야 stateless한 특징에서 벗어날 수 있다.
3. Body : 해당 요청의 실제 내용. 주로 Body를 사용하는 메소드는 POST
다.
2. Response 메시지 구조
응답은 요청에 대한 처리상태를 클라이언트에게 알려주면서 내용을 시작한다.
1. Status Line : 응답의 상태 줄.
- HTTP Version : 요청의 HTTP버전과 동일하다.
- Status Code : 응답 메세지의 상태 코드다.
- Status Text : 응답 메세지의 상태를 간략하게 설명해주는 텍스트다.
HTTP/1.1 404 Not Found
HTTP/1.1 200 SUCCESS
2. Headerse : 해당 요청에 대한 추가 정보(메타 데이터)를 담고있는 부분이다.
- Key : Value 값으로 되어있다(JavaScript의 객체, Python의 딕셔너리 형태라고 보면 된다).
- Host : 요청을 보내는 목표(타겟)의 주소. 즉, 요청을 보내는 웹사이트의 기본 주소가 된다.
- User-Agent : 요청을 보내는 클라이언트의 대한 정보다.
- (ex. chrome, firefox, safari, explorer)
- Content-Type : 해당 요청이 보내는 메세지 body의 타입이다.
- Content-Length : body 내용의 길이.
- Authorization : 회원의 인증/인가를 처리하기 위해 로그인 토큰을 Authroization 에 담는다.
3. Body : 해당 요청의 실제 내용. 주로 Body를 사용하는 메소드는 POST
다
✅ HTTP Request Methods
1. GET
데이터를 받아오기만 할 때 사용. 웹페이지에 접속해서 필요한 데이터를 불러올 때 사용한다.
2. POST
데이터를 생성/수정할 때 사용. 부분의 경우 요청에 body가 포함되서 보내진다.
3. DELETE
서버에 저장된 특정 데이터를 삭제할 때 사용한다.
✔ Request 예시
✅ Status code
1. Success
200
: OK
가장 자주 보게되는 Status Code. 문제없이 요청에 대한 처리가 백엔드 서버에서 이루어지고 나서 오는 응답코드다.
- GET - 리소스 반환
- PUT/PATCH - 상태 메세지 또는 리소스 반환
201
: Created
무언가가 잘 생성되었을 때에(Successfully Created) 오는 Status Code. 대게 POST 메소드의 요청에 따라 백엔드 서버에 데이터가 잘 생성 또는 수정 되었을 때에 보내는 코드다.
- POST - 상태 메세지 또는 새로 생성된 리소스 반환
204
: No Content
요청이 성공했으며 제공할 응답메세지가 없을 경우 사용하는 Status Code. 주로 DELETE 메소드의 요청으로 성공적으로 삭제되어서 응답으로 제공할 컨텐츠가 없을 때 사용된다.
- DELETE - 성공적으로 삭제된 요청의 응답
2. Client Error
400
: Bad Request
해당 요청이 잘못되었을 때 보내는 Status Code. 주로 요청의 Body에 보내는 내용이 잘못되었을 때 사용되는 코드다.
ex) 전화번호를 보내야 하는데 숫자가 아닌 문자열의 주소가 대신 Body에 담겼을 경우
401
: Unauthorized
인증을 요청 했으나 사용자가 인증 요건을 충족하지 못한 경우에 나타난다.
ex) 로그인이 필요한 경우(wish list, 좋아요 기능은 회원이 아니면 요청을 보낼 수 없습니다).
403
: Forbidden
사용자가 허용되지 않은 컨텐츠로 접근을 시도, 즉 유저가 해당 요청에 대한 권한이 없다는 의미를 나타낸다. 접근 불가능한 정보에 접근했을 경우를 의미한다.
ex) 비용을 지불한 사용자가 아닌 경우(유료회원만 접근할 수 있는 데이터를 요청).
404
: Not Found
요청된 URI가 존재하지 않는다(리소스가 없다)는 의미를 나타내는 Status Code.
405
: Method Not Allowed
허기되지 않은 HTTP Method로 시도된 경우, 즉 요청한 메소드는 서버에서 알고 있지만 제거되어 사용할 수 없는 경우를 나타낸다.
409
: Conflict
서버의 현재 상태와 요청이 충돌. 서버에 이미있는 파일보다 오래된 파일을 업로드하면 버전 제어 충돌이 발생한 경우를 나타낸다.
3. Server Error
500
: Internal Server Error
서버에서 에러가 났을 경우다.