HTTP

수경, Sugyeong·2021년 10월 21일
0

TIL

목록 보기
3/3
post-thumbnail

1. 통신과 HTTP

1-1. HTTP의 의미

우리가 흔히 웹페이지의 URL을 적을 때 맨 앞에 사용하고 있던 HTTP에 대해 알아보겠다.
HTTP란 HyperText Transfer Protocol의 약자이다. 차근차근 뜻을 풀어서 알아보자면 아래와 같다.

  • HyperText
    문서와 문서가 링크로 연결되어 있음을 뜻한다.

  • Transfer
    "전송하다" (물건이나 편지 따위를 보내다)는 뜻으로 HTML로 만든 웹페이지 문서(파일)을 보낸다는 뜻이다.

  • Protocol
    협약이나 통신 규약을 의미하는데 서로 떨어져 있는 컴퓨터 끼리 어떻게 HTML 파일을 주고 받을지에 대해 약속한 것이다.

즉, 서로 떨어져있는 컴퓨터들끼리 HTML 문서와 같은 리소스들을 주고 받을 수 있도록 한 통신 약속이다.


1-2. HTTP의 방식

  1. Request / Response
    HTTP는 떨어져 있는 컴퓨터끼리 소통하기 위해 정한 약속이라고 한다. 사람끼리 메신저를 통해 대화를 주고 받는 것 혹은 식당에서 메뉴를 주문하고 주문한 메뉴를 받는 것처럼 컴퓨터도 소통 시에 메시지 형식으로 요청과 응답을 한다.

  2. Stateless (literally State (상태) + less (없음))
    HTTP 통신은 모두 독립적이어서 과거의 HTTP 통신의 결과 (상태)를 보존하지 않는다. 예를 들어, 카페에서 커피를 주문한다고 했을 때 Stateless 의 상태라면 요청하는 주문마다 다양한 점원에게 필요한 정보를 항상 말해주어야 한다. 이처럼 매 통신마다 사전에 필요한 모든 정보를 담아서 요청을 보내야만 한다.

1-3. HTTP Request 메서드

HTTP는 지정된 리소스에 대해 수행할 작업을 나타내는 요청 메서드 집합을 정의하며 HTTP의 동사라고도 불리운다. HTTP Request 메서드는 클라이언트에서 요청을 하는 것으로 주로 GET, POST, DELETE가 많이 쓰인다.

  • GET
    GET 메서드는 지정된 리소스를 서버로부터 받아올 때 주로 사용한다. 데이터를 요청할 때만 GET 메서드 사용한다. 가장 많이 사용되는 메소드이다.

  • POST
    POST 메서드는 데이터를 생성 및 수정 하기 위해 데이터를 서버로 보낸다. 서버로 보내지는 데이터에는 POST 메서드가 요청 사항의 본문에 함께 보내진다.

  • Delete
    DELETE 메서드는 서버에서 특정한 데이터를 삭제 요청할 때 사용하는 메소드이다.


1-4. HTTP - Request 메시지 구조

HTTP 요청은 서버가 특정 동작을 취하게끔 만들기 위해 클라이언트에서 전송하는 메시지이다. Start Line , Headers , Body 로 구성되어 있다.

1. Start Line (요청의 첫번째 줄)

  • HTTP method - 서버가 수행해야 할 동작
  • Request target - 요청이 전송되는 목표 url
  • HTTP version - HTTP 버전
    ex) Get / login HTTP / 1.1

2. Headers (요청의 메타데이터를 담고 있는 부분)

{ key : value } 의 형태를 가진다. 대소문자를 구분하지 않는 문자열 다음에 콜론(':')이 오며, 그 뒤에 오는 값은 구조가 헤더에 따라 달라진다. 헤더는 값을 포함해 전체를 한 줄로 표시한다.

Headers : {
  Host : www.wecode.co.kr
  User-Agent : chrome
  Content-Type : 해당 요청이 보내는 메세지 body의 타입 (applicationjson)
  Content-Length : 50

아래는 마켓컬리 홈페이지에서 개발자도구로 들어가서 확인한 결과이다.

3. Body (요청의 실제 내용)

리소스를 가져오는 요청 메소드에 따라 존재하지 않을 수 있다는 것이 특징이다.

Body : {
  "username" : "codingLee"
  "password" : "coder123Lee"

1-5. HTTP - Response 메시지 구조

서버에서 전송하는 메시지로 Request 메시지 구조와 동일하게 Start Line , Headers , Body 로 구성되어 있다.

1. Status Line (응답의 첫번째 줄 - 상태를 나타냄)

  • HTTP version - HTTP 버전
  • Status Code - 응답 상태 코드
  • Status Text - 응답의 상태를 간략히 설명하는 텍스트
    ex) HTTP / 1.1 404 Not Found

2. Headers (응답의 메타데이터를 담고 있는 부분)

요청의 헤더와 동일한 구조인 { key : value } 의 형태를 따른다. 대소문자를 구분하지 않는 문자열 다음에 콜론(':')이 오며, 그 뒤에 오는 값은 구조가 헤더에 따라 달라진다. 헤더는 값을 포함해 전체를 한 줄로 표시한다.
아래는 마켓컬리 홈페이지에서 개발자도구로 들어가서 확인한 결과이다.

3. Body (응답의 실제 내용)

위에서 요청 메소드에 따라 Body가 항상 존재하지 않듯이. 응답도 응답의 형태에 따라 데이터를 전송할 필요가 없는 경우엔 Body가 없을 수도 있다. 201, 204과 같은 상태 코드를 가진 응답에는 보통 본문이 없다.

Body : {
  "message" : "SUCCESS"
  "token" : "암호화된 유저의 정보"

2. HTTP 상태 코드

HTTP 상태 코드는 서버에 대한 특정 HTTP 요청이 성공적으로 완료되었는지 여부를 나타내며 특징에 따라 5가지 그룹으로 나뉘어진다.

  1. 조건부 응답(100–199)
    요청이 수신되어 프로세스를 계속한다.

  2. 성공(200–299)
    요청을 성공적으로 받아 처리했다.

  3. 리디렉션(300–399)
    요청을 마치기 위해 추가 동작이 필요하다.

  4. 클라이언트 오류(400–499)
    요청이 잘못되어 요청을 처리할 수 없다.

  5. 서버 오류(500–599)
    서버가 유효한 요청을 처리하는 데 실패하였다.


  • 200: OK
    가장 많이 보는 Status Code 로 문제없이 요청에 대한 처리가 백엔드 서버에서 이루어지고 나서 오는 응답코드이다.

  • 201: Created
    무언가가 잘 생성되었을 때에 오는 Status Code 이다.

  • 400: Bad Request
    해당 요청이 잘못되었을 때 보내는 Status Code으로 주로 요청의 Body에 보내는 내용이 잘못되었을 때 사용된다.
    ex) 전화번호를 보내야 하는데 숫자가 아닌 문자열의 주소가 대신 Body에 담겼을 경우

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

  • 403: Forbidden
    유저가 해당 요청에 대한 권한이 없다는 뜻으로 접근 불가능한 정보에 접근했을 경우 나타난다.
    ex) 유료회원만 접근할 수 있는 데이터를 요청 했을 때

  • 404: Not Found
    요청된 URI 가 존재하지 않는다는 의미이다.

  • 500: Internal Server Error
    서버에서 에러가 났을 때의 Status Code이다.


<출처>
MDN
인프런

0개의 댓글