본문 바로가기
CS/네트워크

[네트워크] HTTP (Hypertext Transfer Protocol)

by 스누누피 2025. 1. 16.

HTTP(Hypertext Transfer Protocol)는 World Wide Web을 통해 하이퍼 텍스틑를 전송하는데 사용되는 프로토콜이다.

프로토콜은 메시지가 어떻게 형식화되고 전송되는지, 그리고 웹 서버와 브라우저가 다양한 명령에 어떻게 응답해야 하는지를 정의한다.

 

HTTP는 요청-응답 모델에서 작동한다. 클라이언트(보통 웹 브라우저)가 웹 페이지나 파일과 같은 리소스에 대한 HTTP 요청을 서버에 보내고 서버는 요청된 콘텐츠와 요청 결과를 나타내는 HTTP 상태 코드로 응답한다.

 

HTTP는 상태를 저장하지 않는다. 즉, 클라이언트에서 서버로 보내는 각 요청은 독립적이며 이전 상호 작용에 대한 정보는 유지하지 않는다. 웹에서 데이터 통신의 기초를 형성하며, 일반적으로 암호화된 통신을 위해 보안이 강화된 HTTPS와 함께 사용된다.


💻 HTTP 기반 시스템의 구성요소

HTTP는 클라이언트-서버 프로토콜이다. 클라이언트-서버 프로토콜이란 수신자(보통 웹 브라우저) 측에 의해 요청이 초기화되는 프로토콜을 말한다. 요청은 하나의 계체, 사용자 에이전트에 의해 전송된다. 보통 사용자 에이전트는 브라우저지만, 검색 엔진 인덱스를 채워 넣고 유지하기 위해 웹을 돌아다니는 로봇과 같이 다른 것도 될 수 있다.

 

각각의 개별적인 요청들은 서버로 보내지며, 서버는 요청을 처리하고 응답을 제공한다. 이 요청과 응답 사이에는 여러 개체들이 있는데 다양한 작업을 수행하는 게이트웨이 또는 캐시 역할을 하는 프록시 등이 있다.

HTTP 기반 시스템의 구성요소

이미지 출처 https://developer.mozilla.org/ko/docs/Web/HTTP/Overview

클라이언트: 사용자 에이전트

사용자 에이전트는 사용자를 대신해 동작하는 모든 도구이다. 주로 브라우저에 의해 수행된다. 브라우저는 항상 요청을 보내는 개체이다.

 

웹페이지를 표시하기 위해, 브라우저는 페이지의 HTML 문서를 가져오기 위한 요청을 전송한 뒤, 파일을 구문 분석하여 실행해야 할 스크립트 그리고 페이지 내 포함된 하위 리소스(이미지나 비디오)를 표시하기 위한 레이아웃 정보(css)에 대응하는 추가적인 요청들을 가져온다. 그런 뒤 브라우저는 완전한 웹 페이지를 표시하기 위해 그런 리소스를 합친다. 브라우저에 의해 실행된 스크립트는 이후 단계에서 좀 더 많은 리소스들을 가져올 수 있으며 브라우저는 그에 따라 웹 페이지를 갱신한다.

 

웹페이지는 하이퍼텍스트 문서로, 표시된 텍스트의 일부는 사용자 에이전트를 제어하고 웹을 돌아다닐 수 있도록 새로운 웹페이지를 가져오기 위해 실행될 수 있는 링크임을 뜻한다. 브라우저는 HTTP 요청 내에서 이런 지시 사항들을 변환하고 HTTP 응답을 해석하여 사용자에게 명확한 응답을 표시한다.

웹서버

통신 채널의 반대편에는 클라이언트에 의한 요청에 대한 문서를 제공하는 서버가 존재한다. 서버는 사실상 논리적으로 단일 기계다. 로드(로드 벨런싱) 혹은 그때 그때 다른 컴퓨터(캐시, DB서버, e-커머스 서버 등)들의 정보를 얻고 완전하게 혹은 부분적으로 문서를 생성하는 소프트웨어의 복잡한 부분을 공유하는 서버들의 집합일 수도 있기 때문이다.

 

서버는 반드시 단일 기계일 필요가 없고, 여러 개의 서버를 동일한 머신 위에서 호스팅 할 수는 있다.

프록시

웹 브라우저와 서버 사이에서 수많은 컴퓨터와 머신이 HTTP 메시지를 이어 받고 전달한다. 여러 계층으로 이루어진 웹 스택 구조에서 이러한 컴퓨터/머신들은 대부분 전송, 네트워크 혹은 물리 계층에서 동작하며, 성능에 가장 큰 영향을 주지만 HTTP 계층에서는 이들이 어떻게 동작하는지 보이지 않는다. 이러한 컴퓨터/머신 중에서도 애플리케이션 계층에서 동작하는 것들을 일반적으로 프록시라고 부른다. 프록시는 눈에 보이거나 그렇지 않을 수도 있으며 다양한 기능들을 수행할 수 있다.

  • 캐싱: 캐시는 공개 또는 비공개가 될 수 있다. ex) 브라우저 캐시
  • 필터링: 바이러스 백신 스캔, 유해 컨텐츠 차단
  • 로드 밸런싱: 여러 서버들이 서로 다른 요청을 처리하도록 허용
  • 인증: 다양한 리소스에 대한 접근 제어
  • 로깅: 이력 정보를 저장

📧 HTTP 메시지

HTTP 메시지에는 요청(requests)응답(responses) 두 가지 타입이 있다.

각각의 타입은 특성있는 형식을 가지고 있다.

 

HTTP 요청 (requests)

HTTP 요청은 웹 브라우저와 같은 인터넷 통신 플랫폼이 웹사이트를 로드하는데 필요한 정보를 요청하는 방식이다.

인터넷을 통해 이루어진 각 HTTP 요청은 다양한 유형의 정보를 담고 있는 인련의 인코딩된 데이터를 포함한다.

HTTP 요청

이미지 출처 https://developer.mozilla.org/ko/docs/Web/HTTP/Overview

일반적으로 HTTP 요청은 다음과 같은 내용을 포함한다.

  1. HTTP 메서드
  2. URL (Path)
  3. HTTP 버전 유형
  4. HTTP 요청 헤더
  5. HTTP 본문 (Body)
  • HTTP 메서드
    • HTTP 메서드는 HTTP 요청이 쿼리된 서버에서 기대하는 동작을 나타낸다.
    • 예를 들어, 가장 일반적인 HTTP 메서드 두 가지 'GET'과 'POST'이다.
      'GET' 요청은 반환되는 정보(보통 웹 사이트 형식)를 기대하는 반면, 'POST' 요청은 일반적으로 클라이언트 웹 서버에 정보(ex. 사용자 이름 및 비밀번호와 같은 양식 정보)를 제출하고 있음을 나타낸다.
  • HTTP 요청 헤더
    • HTTP 헤더는 키-값 쌍으로 저장된 텍스트 정보를 포함하고 있으며, 모든 HTTP 요청 및 응답에 포함된다. 이러한 헤더는 클라이언트가 사용하는 브라우저와 요청되는 데이터와 같은 핵심 정보를 전달한다
  • HTTP 요청 본문 (Body)
    • POST와 같은 몇 가지 메서드를 위한, 요청이 전송하는 정보의 '본문'을 포함하는 부분으로, 반드시 요청에 포함되지는 않는다.
    • HTTP 요청의 본문에는 사용자 이름과 비밀번호 또는 양식에 입력된 다른 데이터와 같이 웹 서버에 제출되는 모든 정보가 포함된다.

HTTP 응답 (responses)

HTTP 응답은 웹 클라이언트가 HTTP 요청에 대한 응답으로 인터넷 서버로부터 받는 것이다. 이러한 응답은 HTTP 요청에서 요청된 내용에 따라 정보를 전달한다.

HTTP 응답

이미지 출처 https://developer.mozilla.org/ko/docs/Web/HTTP/Overview

  1. HTTP 버전 유형
  2. HTTP 상태 코드 및 메시지
  3. HTTP 응답 헤더
  4. 선택사항으로 가져오는 리소스가 포함되는 HTTP 본문 (Body)
  • HTTP 상태 코드 및 메시지
    • HTTP 상태코드는 HTTP 요청이 성공적으로 완료되었는지 여부를 나타내는 데 가장 자주 사용되는 3자리 코드이다. 상태 코드는 다음 5개 블록으로 나뉜다.
      1. 1xx 정보
      2. 2xx 성공
      3. 3xx 리디렉션
      4. 4xx 클라이언트 오류
      5. 5xx 서버 오류
    • "xx"는 00과 99 사이의 다양한 숫자를 나타낸다.
    • 숫자 '2'로 시작하는 상태 코드는 성공을 나타낸다. 예를 들어, 클라이언트가 웹페이지를 요청한 후 가장 흔히 보이는 응답은 '200 OK'상태 코드를 가지며, 이는 요청이 제대로 완료 되었음을 나타낸다.
    • 응답이 '4' 또는 '5'로 시작하면 오류가 발생하였으며 웹페이지가 표시되지 않는다. '4'로 시작하는 상태 코드는 클라이언트 측 오류를 나타낸다 (유명한 응답으로 URL에 오타를 입력하면 '404 NOT FOUND'가 있다). '5'로 시작하는 상태 코드는 서버 측에 문제 있음을 의미한다.
    • '1' 또는 '3'으로 시작할 수 있는데, 각각 정보 응답과 리디렉션을 나타낸다.
  • HTTP 응답 헤더
    • HTTP 요청과 마찬가지로 HTTP 응답에도 응답 본문에 전송되는 데이터의 언어와 형식 등 중요한 정보를 전달하는 헤더가 포함되어 있다.
  • HTTP 응답 본문 (Body)
    • 'GET' 요청에 대한 성공적인 HTTP 응답은 일반적으로 요청된 정보를 포함하는 본문을 갖는다. 대부분의 웹 요청에서 이는 웹 브라우저가 웹페이지로 변환할 HTML 데이터다.

🚧 HTTP로 제어할 수 있는 것

HTTP의 확장 가능한 특성은 수년 간에 걸쳐 웹의 점점 더 많은 기능들을 제어하도록 허용되어 왔다.

 

다음은 HTTP를 사용하여 제어 가능한 일반적인 기능이다.

캐시

HTTP로 문서가 캐시되는 방식을 제어할 수 있다. 서버는 캐시 대상과 기간을 프록시와 클라이언트에 지시할 수 있고 클라이언트는 저장된 문서를 무시하라고 중간 캐시 프록시에게 지시할 수 있다.

origin 제약사항 완화하기

스누핑과 다른 프라이버시 침해를 막기위해, 브라우저는 웹 사이트 간의 엄격한 분리를 강제한다.

동일한 origin으로부터 온 페이지만이 웹 페이지의 전체 정보에 접근할 수 있다. 그런 제약 사항은 서버에 부담이 되지만, HTTP 헤더를 통해 그것을 완화 시킬 수 있다.

인증

어떤 페이지들은 보호되어 오로지 특정 사용자만이 접근할 수 있다. 기본 인증은 HTTP를 통해 WWW-Authenticate 또는 유사한 헤더를 사용해 제공되거나, HTTP 쿠키를 사용해 특정 세션을 설정하여 이루어질 수도 있다.

프록시와 터널링

서버 혹은 클라이언트 혹은 그 둘 모두 종종 인트라넷에 위치하며 다른 개체들에게 그들의 실제 주소를 숨기기도 한다. HTTP 요청은 네트워크 장벽을 가로지르기 위해 프록시를 통해 나가게 된다.

세션

쿠키사용은 서버 상태를 요청과 연결하도록 해준다. HTTP가 기본적으로 상태를 저장하지 않는 프로토콜이기 때문에 세션을 만들어주는 계기가 되었다. 해당 기능은 쇼핑몰 장바구니 같은 기능들 뿐 아니라 사용자 구성을 허용하는 대부분 사이트에서 유용하게 사용된다.

 


- 참고 사이트-

https://roadmap.sh/backend

https://www.cloudflare.com/en-gb/learning/ddos/glossary/hypertext-transfer-protocol-http/

https://developer.mozilla.org/ko/docs/Web/HTTP/Overview

 

'CS > 네트워크' 카테고리의 다른 글

[네트워크] 도메인 이름 (Domain Name)  (1) 2025.01.23
[네트워크] 인터넷 기초 개념 정리  (0) 2025.01.14