HTTP 는 컴퓨터 끼리의 소통을 위한 통신규약이다.
HTTP 통신은 Request(요청)과. Response(응답)으로 이루어 진다.
HTTP 통신의 stateless한 특징으로인해 매 요청과 응답은 이전 상태를 알지 못 한다.
일단 위의 간단한 내용을 기억해두자.
protocol(통신 규약)
물리적으로 떨어진 컴퓨터 끼리 어떻게 HTML파일(HyperText)을 주고 받을지에 대한 약속.
transfer
한마디로 내가 만든 웹페이지를 널리 전송. 그리고 전송은 보내는 주체와 받는 주체가 있다.
HTTP는 컴퓨터들끼리 HTML파일을 주고받을 수 있도록 하는 소통방식 또는 약속이다.
컴퓨터 끼리의 소통도 결국 사람이 필요에 의해서 만든 소통 방식이기 때문에 우리의 소통 방식과 큰 차이점이 없다.
‘랩탑을 연다. 유튜브에 접속한다. 내가 평소 즐겨보던 유튜브 영상의 링크를 누른다. 그 순간 내 랩탑은 구글의 서버에게 요청을 보낸다. "골든 리트리버 영상 주세요." 구글의 서버는 이 요청을 처리해서 다시 요청을 보낸 나의 랩탑에 응답을 보낸다. "귀여운 골든 리트리버 영상 드립니다." ‘
실제 프로젝트를 진행할 때, 프론트엔드에서 백앤드에게 데이터를 요청하고 백엔드는 요청을 처리해서 응답을 준다. 이 요청과 응답에 대한 구조와 메세지를 잘 파악하면 대부분의 에러를 잡아낼 수 있다.
절대 잊어서는 안 될 HTTP의 특징! 문자 그대로 번역하면 State(상태) + less(없음) 을 의미한다.
이전의 상태를 전혀 알지 못 한다는 것이다.
무슨 뜻이냐면 '매 통신마다 필요한 모든 정보를 담아서 요청을 보내야 한다' 는 것이다.
http요청은 프론트(클라이언트)가 벡엔드(서버)에 데이터 처리를 시작하게 하기 위해 보내는 메세지이다. 세 부분으로 구성되 었다.
Start Line, headers, body
Start Line은 HTTP method(주로GET, POST, DELETE)와 Request target, HTTP Version으로 구성되어 있다.
예시를 보도록 하자.
Headers는 해당 요청에 대한 추가 정보를 담고 있다.
세션중 여기서 궁금했던 것은 body내용의 길이인'content-length' 가 굳이 필요한가 였는데 멘토님께서는 사람이 직접입력하는 것이 아니기 때문에, 때에 따라 필요할 수도 필요없을 수도 있다고 하셨다.
body는 해당 요청의 실제 내용이다. 주로 body를 사용하는 메서드는 POST이다.
규약에 따른 응답의 구조도 Status Line, Headers, Body 크게 세 부분이다.
Headers는 응답의 추가 정보를 담고 있다. 그러나, 응답에서만 사용되는 헤더의 정보들이 있다.
(ex. 요청하는 브라우저의 정보가 담긴 User-Agent 대신, Server 헤더가 사용된다.)
응답의 body도 응답의 형태에 따라 데이터를 전송할 필요가 없는 경우엔 Body가 없을 수도 있다.
가장 많이 사용되는 Body 의 데이터 타입은 JSON(JavaScript Object Notation) 이다.
GET, POST, DELETE를 쇼핑을 하는 상황으로 이해해보자
(예시가 길기 때문에 사용예시는 필요할 시 위코드페이지에서 확인해보자.😀)
서버로 부터 데이터를 받아오기만 할 때 사용된다.
우리가 웹페이지를 띄울 때, 정보들을 모두 GET메서드로 요청을 보내서 받아온 것이다.
장바구니에 담은 제품을 조회한다.
데이터를 생성 / 수정 할 때 주로 사용되는 메서드이다. 그렇기 때문에 대부분의 경우 body가 포함된다.
장바구니에 마음에 드는 상품을 담는다.
특정 데이터의 삭제 요청을 서버에 보낼때 사용한다.
장바구니에서 제품을 삭제한다.
🎁 Success
200: OK
문제없이 요청에 대한 처리가 백엔드 서버에서 이루어지고 나서 오는 응답코드이다.
201: Created
잘 생성 되었다는 뜻.
대게 POST 메소드의 요청에 따라 백엔드 서버에 데이터가 잘 생성 또는 수정 되었을 때에 보내는 코드이다.
204: No Content
요청이 성공했으며 제공할 응답메세지가 없을 때 사용한다.
주로 DELETE 메소드의 요청으로 성공적으로 삭제되어서 응답으로 제공할 컨텐츠가 없을 때 사용된다.
🎁 Client Error
400: Bad Request
해당 요청이 잘못되었을 경우.
주로 요청의 Body에 보내는 내용이 잘못되었을 때 사용되는 코드이다.
401: Unauthorized
유저가 해당 요청을 진행하려면 먼저 로그인을 하거나 회원가입이 필요하다는 의미를 나타낸다.
ex) wish list, 좋아요 기능은 회원이 아니면 요청을 보낼 수 없습니다.
403: Forbidden
유저가 해당 요청에 대한 권한이 없다는 의미를 나타낸다.
접근 불가능한 정보에 접근했을 경우를 의미한다.
401과 헷갈릴 수 있는데 접근 가능하지만 로그인이 필요한 것과, 접근이 불가능하다는 것을 기억하면 구분하기 쉽다.
ex) 오직 유료회원만 접근할 수 있는 데이터를 요청 했을 때
🎁 Server Error
👍👍👍👍