그 외 공부/네트워크

[네트워크] HTTP란?

SeongOnion 2021. 5. 16. 16:56
728x90

HTTP

HTTP란?

HyperText Transfer Protocol의 약자로, HyperText 문서(HTML)의 리소스들을 가져오거나 보낼 때 사용하는 통신규약

TCP / IP 위에서 이루어짐

HTTP는 요청 & 응답 구조로 이루어져있다

Client가 Request & Server가 Response

HTTP의 특성

✅ Stateless하다!

각각의 요청(Request)와 응답(Response)는 독립적인 행위이다.

Ex) 클라이언트가 요청을 보낸 후 응답을 받고, 얼마 후에 또 다른 요청을 보낼 때 클라이언트와 서버는 둘 다 이전에 보냈던 요청 / 응답에 대해 기억하지 못한다.

Stateless하기 때문에 다수의 Request가 서버로 들어와도 부하를 줄일 수 있다. (연결 정보를 저장할 필요가 없기 때문)

그러면 어떻게?

  • 쿠키, 세션, 캐시 등을 사용해 유지될 필요가 있는 데이터들을 저장하고 관리한다
    • Ex) 로그인 된 상태를 점검, 방문 기록 등

Request

1. Start Line

  • Http Method

    • GET / POST / PUT / DELETE / OPTIONS 등 Request의 액션을 정의
  • Request Target

    • HTTP 요청이 전송되는 목표 주소
      • HTTP 메서드에 따라서 Request Target 포맷이 달라짐
      • 보통 /login 등의 path 정보들, Host domain은 Header에 담음
  • Http Version

    • Http의 버전 정보를 담음

ex) POST / HTTP 1.1

2. Header

Key : value 쌍으로 이루어짐

  • Host : 요청이 전송되는 target의 호스트 URL 주소
  • User-Agent : 요청을 보내는 클라이언트의 정보
    • 웹 브라우저의 정보 등
  • Accept : 해당 요청이 받을 수 있는 데이터 타입
    • Ex) 내 요청에 대한 응답을 json 형태로 줘!
  • Connection : 해당 요청이 끝난 후 클라이언트와 서버의 지속적인 네트워크 커넥션을 유지 여부
    • keep-alive or close
  • Content-Type : Request가 보내는 메시지의 body타입
    • POST / PUT 등에서 보내는 타입. Ex) application/json
  • Content-Length : 메시지 body의 길이

HOST와 request Target의 차이?

HOST: 요청을 보내는 도메인. Ex) naver.com

Request Target: 상세 Path Ex) /login, /main

Host + Request Target 이 완벽한 주소가 되는 것!

3. Body

  • Request가 보내는 메시지 혹은 내용
  • 일반적인 GET method는 Body가 존재하지 않는다. -> 단지 요청을 하는 것이기 때문!

Response

1. Status Line

  • Status Code: 응답 상태를 나타내는 코드

    • 200: OK - 요청 성공

    • 400: Bad Request - 잘못된 문법으로 인해 서버가 요청을 이해할 수 없음을 나타낸다

    • 401: Unauthorized - 클라이언트가 응답을 받기 위한 인증을 거치지 않은 경우

    • 403: Forbidden - 클라이언트가 콘텐츠에 접근할 권리를 가지고 있지 않음

      • 401 vs 403 : 403은 클라이언트가 누구인지 알고 있음 -
        • 401 : 너 누구니?
        • 403 : 넌 안돼~
    • 404: Not Found - 서버가 요청 받은 리소스를 찾을 수 없는 경우

    • 500: Internal Server Errror - 서버가 처리 방법을 모르는 상황이 발생 (보통 코드가 잘못된 경우)

    • 502: Bad Gateway - 서버가 게이트웨이나 프록시 서버 역할을 하면서 업스트림 서버로부터 유효하지 않은 응답을 받았을 때

      • Gateway?

        서로 다른 프로토콜을 연결해주는 장치

        컴퓨터가 현 네트워크에서 다른 네트워크로 이동하기 위해 거쳐야 하는 거점

        두 컴퓨터가 네트워크 상에서 서로 연결되기 위해선 동일한 통신 프로토콜을 사용해야 하는데, 다른 네트워크 상에 존재하는 서로 다른 프로토콜을 적절히 변환해주는 역할을 함

        라우터와 유사한 역할이지만, 라우터보다 조금 더 포괄적인 개념

  • Status Text: 응답 상태를 간략하게 설명해주는 부분

    • 200 : OK 에서 200 = Status Code, OK = Status text
  • HTTP 버전

2. Header

  • Request에서 사용되는 헤더와 동일하지만, User-Agent 대신 Server 헤더가 사용됨

3. Body

  • Request의 Body와 일반적으로 동일함
  • 보내줄 데이터가 없을 때는 역시 Body가 비어있을수도 있음