HTTP(HyperText Transfer Protocol)
- 내가 HyperText로 만든 멋있는 웹페이지를 주고 받을 때(transfer) 쓰는 통일된 약속(protocol). 우리가 사용한 인터넷 상에서 일어나는 소통은 대부분 HTTP 규약이라고 한다.
HTTP의 특징
Request/Resposne (요청/응답)
[1] 내가 서버한테 '나 아무개야. 로그인해도 돼?'(Request)
[2] 서버는 '아무개 회원이구나! 들어와!'(Response)
[3] 프런트엔드 개발자들이 미리 구성해놓은 알고리즘에 따라 로그인이 완료된 페이지로 redirect된다.
HTTP는 [1]과 [2]만 수행하는 메신저라고 생각하면 된다.
Stateless(상태없음)
- 각각의 HTTP 통신은 독립적이기 때문에 과거에 벌어진 통신 내용을 알지 못한다.
- 따라서, 매 통신마다 필요한 모든 벙보를 담아서 요청을 보내야 한다. 예를 들어, 아이디와 비밀번호를 담아 request를 보내면 서버가 확인하고 '로그인 성공!'이라는 response를 보내주긴 하지만 이후의 명령에서는 더 이상 로그인했다는 정보가 존재하지 않는 것.
- 이처럼 연속된 데이터 처리가 불가하다는 이유 때문에 로그인 토큰, 브라우저의 쿠키, 세션, 로컬 스토리지 등이 만들어진 것이다.
Request, Response 구조
Request 구조
- Start Line
- HTTP Method: POST, GET, DELETE 등...
- Request target: 요청하고 있는 URL
- HTTP Version
- Headers: host, user-agent, content-lentgh 등 해당 요청에 대한 메타 데이터를 담고 있음
- Body: 보내는 실제 내용을 담고 있음. 주로 POST 메서드에서만 쓴다.
Response 구조
- Status Line
- HTTP Version
- Status Code
- Status Text
- Headers
- Body
HTTP Request Methods
- 많은 메서드가 있지만 가장 많이 쓰이는 GET, POST, DELETE를 중심으로 설명하겠다.
- GET: ex. 장바구니에 담긴 제품을 조회하거나 전체 상품을 카테고리 별로 조회할 때.
- POST: ex. 회원가입과 로그인 등 실질적으로 보내는 데이터가 있을 때. django에서는 create() 함수랑 친구.
- DELETE: ... 그냥 삭제
Response Status Codes
백엔드에서 http를 이용해보자
- Server에 HTTP request를 전송할 수 있는 client 중에 하나인 Httpie를 설치할 것이다.
sudo apt install httpie
- http -v 다음에 request method를 명시해주고, Request target url을 입력한 후에 query가 있다면
query == _"query you want"_
라고 입력해주고 body를 적어준다.
http -v GET localhost:8000/product/category category==7 sort==-price
- 터미널을 세개 정도 띄워놓는 것 추천. 하나는 httpie용, 하나는 runserver용, 하나는 데이터베이스 용. runserver를 해놓고 httpie를 통해 요청을 보내고 만약 post를 했다면 해당 내용이 데이터베이스에 잘 들어갔는지 확인하는 것이다. 내가 무언가를 print해서 확인하거나 오타나 명확한 에러 파악을 하기 위해서는 runserver용 터미널을 보자.