TIL 26. HTTP 개요 - Request & Response, Method, Status code

문승준·2021년 9월 15일
0

Internet & Network

목록 보기
2/6
post-thumbnail

HTTP의 특징인 RequestResponse 메시지의 구조와 여러 메소드를 알아보고, StatelessStatus code에 대해 알아보자.


HTTP란?

Hyper Text Transfer Protocol

HyperText : 문서와 문서가 링크로 연결되어 있음

Transfer : HTML 문서 파일을 보낸다.

Protocol : 문서 파일을 주고 받는 방식과 약속

  • 웹에서 정보를 주고 받을 수 있는 통신규약으로 TCP/IP 기반이다.

  • 클라이언트와 서버 사이에 이루어지는 요청/응답 프로토콜이다.

  • 주로 HTML 문서를 전송하지만, Plain text로 이루어진 JSON이나 XML 같은 형태의 정보도 주고 받을 수 있다.

  • 웹서버는 보통 표준 포트인 80번 포트로 서비스한다.


Request & Response 메시지 구조

  • HTTP 규약에 따라 메시지를 구성해서 요청/응답한다.

Request 메시지의 구조

HTTP 요청은 프론트엔드(클라이언트) 에서 백엔드(서버)에 일(데이터 처리)을 시작하게 하기 위해 보내는 메세지다.

  1. Start Line: 요청의 첫번째 줄에 해당하고 세 부분으로 구성되어있다.

    • HTTP Method: 해당 요청이 의도한 액션을 정의하는 부분.
      주로 GET, POST, DELETE가 많이 쓰임

    • Request target: 해당 request가 전송되는 목표 url

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

    • Start Line 예시
      GET /login HTTP/1.1

    GET 메소드로 login 이라는 요청 타겟에 HTTP 1.1 버전으로 요청을 보낸다.

  2. Headers 해당 요청에 대한 추가 정보(메타 데이터)를 담고있는 부분이다.

    • Key: Value 형태 (JavaScript의 객체, Python의 딕셔너리)

    • 자주 사용되는 Headers의 정보 예시

 Headers: {
    	Host: 요청을 보내는 목표(타겟)의 주소. 즉, 요청을 보내는 웹사이트의 기본 주소.(ex. www.apple.co.kr)
    	User-Agent: 요청을 보내는 클라이언트의 대한 정보 (ex. chrome, firefox, safari)
    	Content-Type: 해당 요청이 보내는 메세지 body의 타입 (ex. application/json)
    	Content-Length: body 내용의 길이
    	Authorization: 회원의 인증/인가를 처리하기 위해 로그인 토큰을 Authroization 에 담는다
}

  1. Body: 해당 요청의 실제 내용. 요청 메소드에 따라 Body가 없을 수도 있다.

    • 주로 POST 메소드에서 body를 사용하고,
      JSON(JavaScript Object Notation)으로 작성한다.

    • 로그인 시 서버에 보낼 요청의 내용 예시

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

Response 메시지의 구조

가장 큰 차이점은 첫번째 구조 Status line 이다.

  1. Status Line: 요청에 대한 처리상태를 클라이언트에게 알려주면서 시작한다.

    • HTTP Version: 요청의 HTTP버전과 동일

    • Staus Code 응답 상태 코드 (아래 자세한 내용)

    • Status Text: 응답 메세지의 상태를 간략하게 설명해주는 텍스트

    • Status Code 예시

    HTTP/1.1 404 Not Found
    HTTP 1.1 버전으로 응답하고 있는데, 프론트엔드에서 보낸 요청(ex. 로그인 시도)에 대해서
    유저의 정보를 찾을 수 없기 때문에(Not Found) 404 상태 메세지를 보낸다.

    HTTP/1.1 200 SUCCESS
    HTTP 1.1 버전으로 응답하고 있는데, 프론트엔드에서 보낸 요청에 대해서 성공했기 때문에
    200 상태 메세지를 보낸다.

  1. Headers : 응답의 메타데이터를 담고 있다. 양식은 요청과 거의 동일

  2. Body : 응답해줄 데이터. 요청 메소드에 따라 body가 없을 수도 있다.
    양식은 요청과 거의 동일하지만, 응답에서만 사용되는 헤더의 정보들이 있다.

    (ex. 요청하는 브라우저의 정보가 담긴 User-Agent 대신, Server 헤더가 사용된다.)


Stateless

각 통신(요청/응답)은 독립적이기 때문에 과거의 통신 결과나 상태를 보관하지 않는다.

따라서 매번 필요한 정보를 모두 다 보내야한다.

연속된 데이터 처리를 위해 로컬&세션 스토리지, 쿠키 등이 만들어졌다.

(ex: 로그인 상태를 유지하기)


HTTP request method

GET

  • 필요한 데이터를 불러올 때 사용한다. ex) 장바구니 내용 확인하기
  • 이름과 값을 쌍으로 하고 &을 사용해 구분한다.
  • 인코딩/디코딩 과정이 없어서 POST보다 빠르다.
  • 데이터가 URL에 노출되고, URL 길이 제약으로 많은 데이터 전송은 어렵다.

POST

  • 데이터를 생성 / 수정할 때 사용한다. ex) 장바구니에 물건 추가하기
  • 보통 Form에서 POST를 지정해 사용한다.
  • HTTP body에 데이터를 숨겨서 서버로 전송한다.

PUT

  • 데이터를 생성 / 수정할 때 사용하지만, POST를 주로 사용한다.
  • 보안상 위험해서 비활성화한다.

DELETE

  • 서버에 저장된 특정 데이터를 삭제할 때 사용한다. ex) 장바구니 물건 삭제
  • request body에 따로 내용을 담지 않는다 - 브라우저에서 삭제해버림

HTTP Status code

Success

200 : Ok (성공)

  • 문제없이 요청에 대한 처리가 백엔드 서버에서 이루어지고 나서 오는 응답코드

201 : Created (작성됨)

  • 대게 POST 메소드의 요청에 따라 백엔드 서버에 데이터가 잘 생성 또는 수정 되었을 때에 보내는 코드

Error

400 : Bad Request (잘못된 요청)

  • 주로 요청의 Body에 보내는 내용이 잘못되었을 때 사용되는 코드

    (데이터 타입이 틀리거나)

401 : Unauthorized (권한 없음 - 인증 실패)

  • 유저가 해당 요청을 진행하려면 먼저 로그인을 하거나 회원가입이 필요하다는 의미

403 : Forbidden (금지됨 - 인가 실패)

  • 접근 불가능한 정보에 접근했을 경우 (ex: 유료회원용 데이터 요청 등)

404 : Not Found (찾을 수 없음)

  • 존재하지 않는 페이지에 대한 요청.
  • 프론트측에서 보내는 데이터가 없다.

Server Error

500 : internal server error (내부 서버 오류)


profile
개발자가 될 팔자

0개의 댓글