본문 바로가기
wecode/TIL 정리

위코드 Foundation - HTTP에 대해서

by 왕거 2020. 8. 8.

HTTP의 구조와 핵심 요소

  • HyperText Tranfer Protocol의 약자
  • HTML 문서를 교환하기 위해서 만들어진 Protocol
    • 어떠한 방식 또는 형태로 통신을 하자고 사전에 규정을 한 "통신 구조" 또는 "통신 형식이라고 보면 됨.
    • 프론트앤드 서버 - 백엔드 서버 뿐 아니라 프론트앤드 서버와 클라이언트간의 통신에도 사용됨
  • TCP/IP를 기반으로 규정되었다.

 

HTTP의 핵심 요소

  • HTTP의 통신방식은 기본적으로 요청과 그에대한 응답으로 구성된다.
    • 클라이언트가 서버에 HTTP Request(요청)을 보내면 서버는 HTTP Response(응답) 보내는 구조
    • 클라이언트는 Request만 서버는 Response만 수행하는 것이 아니고 양 쪽에서 둘 다 수행할 수 있다.
  • HTTP는 stateless하다.
    • stateless란 state(상태)를 저장하지 않는다는 뜻
    • 여러개의 요청과 응답이 서로 연결되지 않는다는 의미로 각각의 요청-응답은 독립적이다.
      • 예를 들어서 1차로 현재시간을 요청하면 서버는 현재시간을 응답해주면 된다.
      • 이후에 2차요청에서 1차 응답에서 사용된 시간을 요청한다면 문제가 발생한다는 의미
    • 여러 요청과 응답이 필요한 경우에는 쿠키나 세션 등을 사용해야 한다.
  • Request 구조
    • Start Line
      • start line 또한 3부분으로 구성된다.
        • HTTP Method  -  해당 request가 의도한 action을 정의하는 부분
          • GET, POST, PUT, DELETE, OPTIONS 등등
        • Request Target  -  해당 request가 전송되는 목표지점
          • /login, /user 등등
        • HTTP Version  -  사용되는 HTTP버전
          • 1.0, 1.1, 2.0 등이 있다.
    • Headers
      • 해당 Request에 대한 추가 정보를 가지고 있는 부분
      • [KEY] : [VALUE] 로 구성된다.
      • Headers 또한 3부분으로 나뉜다.
      • 자주 사용되는 Headers 정보들
        • Host  -  요청이 전송되는 Target의 host url
        • User-Agent  -  요청을 보내는 클라이언트에 대한 정보
        • Accept  -  해당 요청이 받을 수 있는 응답(response) 타입
        • Connection  -  해당 요청이 끝난 후, 클라이언트와 서버간의 컨넥션 유지에 대한 부분
        • Content-Type  -  해당 요청이 보내는 메세지  body의 타입
        • Content-Length  -  메세지 body의 길이
    • Body
      • 해당 request의 실제 메세지 / 내용
      • Body가 없는 request도 많음
        • 예를 들면 GET request 같은 경우들
  • Response 구조
    • Status Line
      • Response의 상태를 간략하게 나타내주는 부분
      • 구조  ex)"HTTP/1.1 404 Not Found"
        • HTTP 버전
        • status code  -  응답 상태를 나타내는 코드, 숫자로 이루어져있다.
          • 200, 404 같은 코드들
        • Status Text  -  응답 상태를 간략하게 설명해주는 부분
          • "Not Found" 같은 메세지들
    • Headers
      • Request의 headers와 동일하다.
      • Response에서만 사용되는 header 값들이 있다.
        • User-Agent 대신 Server헤더 등등
    • Body
      • Request의 body와 동일하다.
      • Request와 동일하게 모든 Response에 body가 있는 것이 아님, 데이터를 전송할 필요가 있을 때만 body에 데이터를 채운다.

자주 쓰이는 HTTP Methods

  • GET
    • 어떤 데이터를 서버에서 받아(GET)올 때 주로 사용하는 Method
    • 데이터 생성, 수정, 삭제 없이 단순하게 받아오기만 할 때 사용된다.
    • 가장 간단하고 많이 사용됨
    • body가 비어있는 경우가 많음
  • POST
    • 데이터를 생성, 수정, 삭제할 때 주로 사용하는 Method
    • 대부분의 경우 body에 데이터가 채워져있다.
  • 그외에 알고 있으면 좋은 Method
    • OPTIONS
      • 요청 URI에서 사용할 수 있는 Method를 확인할 때 사용한다.
    • PUT
      • POST와 비슷하게 데이터를 생성할 때 사용하는 Method
      • POST와 겹치기 때문에 위치가 애매함, 최근에는 POST를 쓰는 추세
    • DELETE
      • 특정 데이터를 삭제하는 요청을 보낼 때 사용하는 Method
      • POST를 사용해도 삭제가 가능해서 잘 안쓰는 편

자주 쓰이는 HTTP Status Code

  • 200  -  OK
    • 문제없이 잘 실행되었음을 알리는 코드
  • 301  -  Moved Permanently
    • 해당 URI가 다른 주소호 바뀌었음을 알리는 코드
  • 400  -  Bad Request
    • 해당 요청이 잘못된 요청임을 알릴 때 사용하는 코드
  • 401  -  Unauthorized
    • 해당 요청을 진행하려면 먼저 선행할 작업이 있다는 것을 알릴 때 사용하는 코드
  • 403  -  Forbidden
    • 유저가 해당 요청에 대해서 권한이 없음을 알릴 때 사용하는 코드
  • 404  -  Not Found
    • 요청한 URI가 존재하지 않을 때 사용하는 코드
  • 500  -  Internal Server Error
    • 서버에서 에러가 발생했을 때 사용되는 코드