CDN

HTTP 기본

SALEE 2023. 3. 30. 14:07
728x90

HTTP(Hyper Text Transfer Protocol)

  • WWW 적용을 위해 단순함을 염두해두고 디자인됨
  • 과거에는 문서 간 링크 통해 HTML 전송 위해 시작
  • 현재는 이미지, 영상, JSON, XML 등 거의 모든 형태 데이터 전송
  • 서버 간 데이터를 주고 받을 때도 사용
  • 인터넷에서 데이터를 주고 받기 위한 프로토콜
  • Application 계층에서 동작
  • HTTP/3 - UDP / 하위 HTTP - TCP

 

URL 컴포넌트 구조

http://example.com:8080/path?id=doa&pw=1234

  • http
    • Protocol(=액세스 프로토콜)
  • example.com
    • Host(Domain) (=액세스할 웹 서버에 대한 도메인 혹은 호스트 IP 정보)
  • 8080
    • Port
  • path
    • 계층적인 디렉토리 형태로 응답을 받을 리소스에 대한 경로
  • id=doa&pw=1234
    • Query String (Key=Value 형태로 구성)

 

HTTP 트랜잭션 과정

  1. 사용자가 브라우저 통해 URL 입력
  2. 사용자가 도메인을 입력하면 로컬 호스트의 Hosts 파일 참조
  3. 도메인에 대한 정보가 없으면, 도메인에 대한 리소스 레코드 정보가 기록된 DNS 서버를 경유하여 도메인에 대응하는 주소 정보 조회
  4. 브라우저에서는 사용자가 요청한 프로토콜 규격에 알맞게 서버로 전달할 요청 메시지를 생성
    • 이 요청 메시지에서는 서버가 수행할 동작을 의미하는 메서드 정보 & HTTP 버전 정보, 웹 서버 호스트 정보 등을 포함
  5. 생성된 요청 메시지는 인터넷망을 통해 서버측으로 정보 전달
  6. 요청을 받은 웹 서버는 해당 메시지 정보를 해석하여 응답 메시지를 만들어 회신
  7. 웹 브라우저는 서버에게 받은 메시지를 화면에 렌더링하여 사용자에게 시각화된 정보를 제공

 

HTTP 메시지 구조(규격) - RFC 7230

  • HTTP의 메시지 규격은 start-line 으로 시작하여 메시지 헤더와 바디로 구성
  • Request Line (요청 메시지의 Start Line)
    • 서버가 수행해야 할 동작을 의미하는 GET, POST, PUT, DELETE, OPTIONS와 같은 메서드에 대한 정보와 요청 대상 리소스의 경로를 표현
    • HTTP 버전 정보 포함
  • Status Line (응답 메시지의 Start Line)
    • HTTP 버전 정보와 상태 코드, 사유가 포함

 

HTTP 메시지 구조

  • Request Header
    • 사용자 소프트웨어를 의미하는 User-Agent 정보, 요청 대상 정보인 Host, 클라이언트측에서 콘텐츠 협상을 위한 Accept 등 포함
  • Response Header
    • 응답에 대한 정보를 포함하는 고유 식별 번호를 포함하는 ETag와 Apache 혹은 Nginx와 같은 서버측의 소프트웨어 정보와 요청 메시지에 대한 응답 시간 등 포함
  • General Header
    • 요청과 응답 메시지에 공통으로 포함되는 헤더 필드인 TCP Connection 방식 등 포함
  • Representation Header(Entity Header)에 포함된 헤더 필드 - 해당 정보를 참조하여 페이로드(본문)을 해석
    • Content-Type(데이터 유형)
    • Content-Length(데이터 길이)
    • Content-Encoding(압축 정보)
    • Content-Language(언어 표현)
  • 헤더 내에서는 ‘field-name’ 과 ‘field-value’ 형태로 구성이 되어 HTTP 전송에 필요한 모든 부가 정보 포함

 

HTTP 추가 내용

  • HTTP/1.1 부터는 명시적으로 캐시와 관련된 부분을 제어하기 위한 Cache-Control 헤더 필드 추가
    • 완전한 콘텐츠 응답에 대한 요청 수와 불필요한 전송을 최소화하기 위한 목적으로 Cache-Control 필드가 추가
  • 보안 헤더를 통해서 웹 취약점 보안을 강화하기 위한 목적으로 암호화된 패킷으로 전송하기 위한 Secure 필드 제공
  • XSS 공격 방지를 위한 HttpOnly와 같은 다양한 헤더 필드 제공
  • Set-Cookie, 리다이렉트와 관련된 Location, 이전 요청 주소를 의미하는 Referer 등의 다양한 정보를 담아 전송
  • 메시지 바디인 표현 데이터에서는 HTML 문서, 이미지, 영상, JSON 등의 Byte 단위로 표현할 수 있는 모든 데이터가 포함

 

REST API 제약 조건 대표적 메서드

  • GET
    • 주로 정적 데이터를 조회하거나, 쿼리 파라미터를 기반으로 특정한 게시글 (ex. /posts?title=doa) 등과 같이 동적 데이터 조회 할 때 활용
  • POST
    • 내부적으로 처리 필요할 때 활용
    • HTML 폼에 입력한 데이터를 전달하는 경우, 메시지 바디 통해 서버로 데이터 전달
    • Ex) 회원 가입, 상품 주문, 상품 등록, 변경
  • PUT
    • 클라이언트에서 서버로 데이터를 보내는데 해당하는 리소스가 이미 존재한다면 대체하고, 없으면 새롭게 생성
  • DELETE
    • 리소스를 삭제하도록 활용

 

HTTP 상태 코드

  • 1xx - 정보성 상태 코드에 해당, 처리가 되면 다음으로 넘어감
  • 2xx - 요청에 대한 정상 처리
  • 3xx - 리다이렉션과 같은 요청
  • 4xx - 클라이언트에 대한 오류에 해당
  • 5xx - 서버에 대한 오류

 

HTTP 특징

  • 무상태 프로토콜
    • C/S간 요청과 응답을 주고 받으면, 연결이 끊어짐
    • 일관된 방식으로 상호작용하기 어러움
  • 비연결성
    • HTTP는 TCP 기반으로 동작
    • 여러개의 객체를 로드 시, 단일 객체마다 모두 별개의 객체로 판단하여 객체마다 지속적인 핸드셰이크 과정 성립
  • Keep Alive (HTTP/1.1부터 기본 활성화)
    • 반복적인 연결을 맺는 문제점 해소 위해 일정 시간동안 ESTABLISH 연결 유지, 이후 능동적으로 Close
    • 해당 프로세스 수가 설정한 시간 동안 유지되기 때문에 서버에서 제한된 MAXConnection 값을 초과할 수 있음
    • 메모리 사용률을 초과하는 문제점이 생길 수 있음
    • Content-Length 가 명확한 경우에만 가능

 

FIFO 방식의 HTTP/1 - HOLB 현상과 파이프라이닝

  • HTTP/1 버전에서 HTTP에서의 블로킹으로 인한 문제점 존재
    • HTTP요청은 순차적으로 처리가 되기 때문에 네트워크 지연과 대역폭 제한 등의 이유로 다음 요청을 보내는 데까지 상당한 딜레이가 발생할 수 있음
  • 개선 방안 - 영속적인 커넥션을 통한 파이프라이닝
    • 여러 개 리소스 요청시, 이전 요청에 대한 응답을 완전하게 받지 않더라도 지속적 연결로 확보한 TCP 연결 내에서 미리 다음 요청에 대한 처리를 시작하면서 전체적인 전달 시간을 최소화하는 방식
    • 여전히 FIFO 방식으로 처리하기에 한계 존재
    • GET, HEAD, PUT과 같은 멱등성을 가진 메서드만 가능
    • 멀티플렉싱으로 대체 (HTTP/2)

 

HTTP/2

  • 바이너리 프레임 포맷으로 변화, 헤더 압축 가능
  • 멀티플렉싱 - 하나의 TCP 연결 상에서 다수의 클라이언트 요청과 서버의 응답이 비동기 방식으로 이루어짐
  • HTTP 하위 버전에서 발생했던 HOLB 현상은 해소 가능
  • HTTP 프로토콜이 동작하는 하위 계층의 TCP에 대한 HOLB 현상은 해소되지 않음
  • 사전 조건 - HTTP/2는 HTTPS만을 지원하기 때문에 SSL/TLS 인증서를 발급 받아야 함

 

HTTP/3

  • QUIC이라는 UDP 기반의 프로토콜 사용 (핸드셰이크 과정 생략)
    • 첫번째 핸드셰이크 과정을 거칠 때에 연결 설정에 필요한 정보들도 모두 포함하여 데이터도 함께 보냄
  • UDP 프로토콜은 TCP 헤더와 비교해보면 확실히 가벼운 구조로 구성
    • TCP 프로토콜은 신뢰성을 확보하기 위해서 다양한 기능을 제공해주기 때문에, 빠른 데이터 전송 자체에만 초점을 둔 UDP에 비해서는 복잡한 구조를 지님
  • HTTP/3에서는 TCP 특성으로 인한 한계를 극복하고자 UDP 기반의 QUIC 위에 얹어 성능 개선에 초점을 둠

 

 

참고 URL : https://medium.com/ctc-mzc/%EC%9D%B8%ED%84%B0%EB%84%B7%EC%97%90%EC%84%9C-%EC%A0%95%EB%B3%B4%EB%A5%BC-%EC%A3%BC%EA%B3%A0-%EB%B0%9B%EA%B8%B0-%EC%9C%84%ED%95%9C-http%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0-5703655a2257

 

인터넷에서 정보를 주고 받기 위한 HTTP에 대해서 알아보자

개요

medium.com

 

728x90

'CDN' 카테고리의 다른 글

DNS 기초  (0) 2023.03.30
CDN 기초  (0) 2022.05.28