HTTP_10.27

송철진·2022년 10월 27일
0

학습 목표

  • HTTP의 특징인 Stateless를 설명할 수 있다.
  • Request, Response 구조에 대해 설명할 수 있다.
  • HTTP request method의 종류를 알고 서로의 차이점을 설명할 수 있다.
  • 대표적인 Status code의 종류를 설명할 수 있다.

1. HTTP란

HyperText Transfer Protocol

1-1. 정의

물리적으로 떨어진 컴퓨터끼리 HTML파일을 주고 받을 수 있게 하는 소통방식, 약속

HyperText
: HTML로 만든 파일
HTML(HyperText Markup Language)
: 문서와 문서가 링크로 연결되도록 하는 태그로 구성된 언어.
: 웹페이지를 만들기 위해서 웹브라우저 위에서 동작하는 언어.

Transfer
웹사이트를 널리 알리고 다른 사람들과 공유하기 위해서 다른 컴퓨터에게 전송한다.

  • 보내는 주체받는 주체

Protocol
협약, 통신 규약

1-2. HTTP의 두가지 특징

http라는 약속의 조항들을 알아보겠습니다

1-2-1. Request / Response (요청 / 응답)

HTTP 통신의 핵심은 요청과 응답이다.

방향행동예시
보내는 주체 → 받는 주체요청사용자가 유튜브 영상 링크 누른다
받는 주체 → 요청 보낸 주체응답유튜브가 영상 보낸다

1-2-2. Stateless

State(상태) + less(없음)

각각의 HTTP 통신(요청/응답)은 독립적이다

  • 과거의 통신(요청/응답)에 대한 내용을 전혀 알지 못한다.
  • 매 통신마다 필요한 모든 정보를 담아서 요청을 보내야 한다.
  • 여러번의 통신(요청/응답)의 진행과정에서 연속된 데이터 처리가 필요한 경우를 위해 로그인 토큰 또는 브라우저의 쿠키, 세션, 로컬스토리지 같은 기술이 만들어졌다.
    (ex. 온라인 쇼핑몰에서 로그인 후 장바구니 기능)

1-3. Request / Response

1-3-1. Request 메세지 구조

HTTP 요청: 프론트엔드(클라이언트) 에서 백엔드(서버)로 보내는 메세지

  • Start Line: 요청의 첫번째 줄. 이 시작 줄도 세 부분으로 구성되어있습니다.

  • HTTP Method: 해당 요청이 의도한 액션을 정의하는 부분. 주로 GET, POST, DELETE가 많이 쓰임
    Request target: 해당 request가 전송되는 목표 url

  • HTTP Version: 말 그대로 사용되는 HTTP 버전을 뜻한다. 주로 1.1 버전이 널리 쓰임

GET /login HTTP/1.1
# 해석: GET 메소드로 login 이라는 요청 타겟에 HTTP 1.1 버전으로 요청을 보내겠다!

Headers: 해당 요청에 대한 추가 정보(메타 데이터)를 담고있는 부분입니다.
Key: Value 값으로 되어있다 (JavaScript의 객체, Python의 딕셔너리 형태라고 보면 된다)
Host: 요청을 보내는 목표(타겟)의 주소. 즉, 요청을 보내는 웹사이트의 기본 주소가 된다. (ex. www.apple.co.kr)
User-Agent: 요청을 보내는 클라이언트의 대한 정보 (ex. chrome, firefox, safari, explorer)
Content-Type: 해당 요청이 보내는 메세지 body의 타입 (ex. application/json)
Content-Length: body 내용의 길이
Authorization: 회원의 인증/인가를 처리하기 위해 로그인 토큰을 Authroization 에 담는다

Headers: {
    Host:  
    User-Agent: 
    Content-Type: 
    Content-Length: 
    Authorization: 
}

Body: 해당 요청의 실제 내용입니다. 주로 Body를 사용하는 메소드는 POST 입니다.

ex) 로그인 시에 서버에 보낼 요청의 내용

Body: {
"user_email":"wecode@gmail.com" "user_password": "wecode"
}

1-3-2. Response 메시지 구조

회원가입할 때 처음 토큰을 생성하고
그 토큰으로 계속 인증한다(바뀌지 않는다!)
토큰에 기한은 없다. 쿠키에는 기한이 있다.

  • Status Line: 응답의 상태 줄입니다.

    • HTTP Version: 요청의 HTTP버전과 동일
    • Status Code: 응답 메세지의 상태 코드
    • Status Text: 응답 메세지의 상태를 간략하게 설명해주는 텍스트
HTTP/1.1 404 Not Found
# 해석: HTTP 1.1 버전으로 응답하고 있는데, 프론트엔드에서 보낸 요청(ex. 로그인 시도)에 대해서
# 유저의 정보를 찾을 수 없기 때문에(Not Found) 404 상태 메세지를 보낸다.
HTTP/1.1 200 SUCCESS
# 해석: HTTP 1.1 버전으로 응답하고 있는데, 프론트엔드에서 보낸 요청에 대해서 성공했기 때문에
# 200 상태 메세지를 보낸다.
  • Headers: 요청의 헤더와 동일하며 응답의 추가 정보(메타 데이터)를 담고있다.
    다만, 응답에서만 사용되는 헤더의 정보들이 있다.
    ex) 요청하는 브라우저의 정보가 담긴 User-Agent 대신, Server 헤더가 사용된다
  • Body: 요청의 Body와 일반적으로 동일합니다.
    응답의 형태에 따라 데이터를 전송할 필요가 없는 경우엔 Body가 없을 수도 있다.
    가장 많이 사용되는 Body 의 데이터 타입: JSON(JavaScript Object Notation)
    로그인 요청에 대해 성공했을 때 응답 내용:
Body: {
    "message": "SUCCESS"
    "token": "kldiduajsadm@9df0asmzm" (암호화된 유저의 정보)
}

2. HTTP methods

2-1. HTTP Request Methods

다음 예시는 애플 홈페이지에서 쇼핑을 하는 상황을 가정합니다

메소드들은 프론트엔드(클라이언트)의 입장에서 요청의 의도가 담긴 것입니다!

2-1-1. GET

어떤 데이터를 서버로 부터 받아(GET)올 때 주로 사용하는 메소드

  • 데이터를 받아오기만 할 때
    ex) 웹페이지를 띄울 때 필요한 정보들
    : GET메소드로 요청을 보내서 받아온 응답을 화면에 띄우는 것!

👉🏻 장바구니에 담은 제품을 조회한다

2-1-2. POST

데이터를 생성 / 수정 할 때 주로 사용되는 메소드
대부분 요청에 body가 포함되어 보내진다
👉🏻 장바구니에 맘에 드는 상품을 담는다

2-1-3. DELETE

특정 데이터를 서버에서 삭제 요청을 보낼때 쓰는 메소드
👉 장바구니에서 제품을 삭제한다

3. Status Code

분류status code
Success200:OK문제없이 요청에 대한 처리가 백엔드 서버에서 이루어짐
Success201:Created무언가가 잘 생성되었을 때(Successfully Created)
Success204:No Content요청이 성공했으며 제공할 응답메세지가 없음,
DELETE 메소드의 요청으로 삭제를 성공해 응답할 컨텐츠 없음
Client Error400:Bad Request해당 요청이 잘못됨, 요청의 Body에 보내는 내용이 잘못됨
ex) 전화번호 보내기: Body에 숫자가 아닌 문자열 주소가 담겼을 때
Client Error401:Unauthorized유저가 해당 요청을 진행하려면 먼저 로그인을 하거나 회원가입이 필요함
ex) wish list, 좋아요 기능은 회원이 아니면 요청x
Client Error403:Forbidden해당 요청에 대한 권한이 없음. 접근 불가능한 정보에 접근 시
Client Error404:Not Found요청된 URI 가 존재하지 않는다
Server Error500:Internal Server Error서버에서 에러 났을 때
profile
검색하고 기록하며 학습하는 백엔드 개발자

0개의 댓글