[HTTP] 나와 웹페이지는 어떻게 통신하는 것일까?

이승연·2020년 12월 20일
0

Web/Network

목록 보기
5/10
post-thumbnail

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 구조

  1. Start Line
  • HTTP Method: POST, GET, DELETE 등...
  • Request target: 요청하고 있는 URL
  • HTTP Version
  1. Headers: host, user-agent, content-lentgh 등 해당 요청에 대한 메타 데이터를 담고 있음
  2. Body: 보내는 실제 내용을 담고 있음. 주로 POST 메서드에서만 쓴다.

Response 구조

  1. Status Line
  • HTTP Version
  • Status Code
  • Status Text
  1. Headers
  2. Body

HTTP Request Methods

  • 많은 메서드가 있지만 가장 많이 쓰이는 GET, POST, DELETE를 중심으로 설명하겠다.
  1. GET: ex. 장바구니에 담긴 제품을 조회하거나 전체 상품을 카테고리 별로 조회할 때.
  2. POST: ex. 회원가입과 로그인 등 실질적으로 보내는 데이터가 있을 때. django에서는 create() 함수랑 친구.
  3. 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용 터미널을 보자.

0개의 댓글