[ HTTP 완벽 가이드 ] 1장 정리 - HTTP: 웹의 기초

현주·2023년 10월 5일

HTTP 완벽 가이드

목록 보기
1/5

✏️ 웹 서버

  • HTTP 프로토콜로 의사소통
    ( ➜ HTTP 서버라고 불리기도 함 )

  • 인터넷의 데이터 저장

  • HTTP 클라이언트가 요청한 데이터 제공

  • 웹 리소스를 관리 / 제공


✔ 리소스

  • 웹 콘텐츠의 원천

  • 어떤 종류의 콘텐츠 소스도 리소스가 될 수 있음
    ( 요청에 따라 정적 파일 / 동적 콘텐츠 등 )


✔ 미디어 타입 ( MIME 타입 )

  • 인터넷은 수천가지의 데이터 타입을 다루기 때문에, HTTP는 웹에서 전송되는 객체 각각에 MIME 타입을 붙임

  • 웹 서버는 모든 HTTP 객체 데이터에 MIME 타입을 붙임
    Ex. Content-type: image/jpeg

  • 웹브라우저가 서버로 부터 객체를 돌려받을 때,
    이 MIME 타입을 통해 다룰 수 있는 객체인지 아닌지 확인

✔️ MIME 타입 (Multipurpose Internet Mail Extenstions, 다목적 인터넷 메일 확장 )

  • 데이터 포멧 라벨
  • 원래는 각기 다른 전자메일 시스템 사이에서 메시지가 오갈 때 겪는 문제점을 해결하기 위해 설계되었으나, HTTP에서도 멀티미디어 콘텐츠를 기술하고 라벨을 붙이기 위해 채택됨
  • 사선(/)으로 구분된 주타입(primary object type)과 부타입(specific subtype)으로 이루어진 문자열 라벨

    Ex. HTML로 작성된 텍스트 문서의 MIME 타입 ➜ text/html
    Ex. JPEG 이미지의 MIME 타입 ➜ image/jpeg

✔ URI (Uniform resource identifier, 통합 자원 식별자)


✔ URL (Uniform resource locator, 통합 지원 지시자)

  • 리소스 식별자의 가장 흔한 형태

  • 특정 서버의 한 리소스에 대한 구체적인 위치를 서술

  • < 스킴://서버위치/경로 > 세 부분으로 이루어진 표준 포맷을 따름

    ✔️ URL 구성요소

    1. 스킴 (어떻게)
      ➜ 리소스 접근을 위해 프로토콜을 서술하는 부분 ( 보통 HTTP 프로토콜 (http://) )
    2. 서버의 인터넷 주소 (어디에)
      ➜ 호스트명 or ip주소
    3. 웹서버의 리소스 (무엇을)

Ex. https://velog.io/@wnguswn7/example.gif
ㅤ스킴ㅤ|ㅤ서버의 인터넷 주소ㅤ|ㅤ웹서버의 리소스


✔ URN (Uniform resource name, 유니폼 리소스 이름)

  • 리소스의 위치에 영향을 받지 않는 유일무이한 이름의 역할

  • 위치 독립적이기 때문에 리소스의 위치를 옮기더라도 문제없이 동작

  • 리소스 위치 분석을 위한 인프라 지원이 필요한데 그런 인프라의 부재 때문에 아직 여전히 실험 중인 상태

Ex. urn:ietf:rfc:2141


✔ 트랜잭션

  • HTTP 메시지라 불리는 정형화된 데이터 덩어리를 이용해 이루어짐

  • 명령과 URI를 포함하는 요청 명령과 트랜잭션의 결과를 포함하는 응답 결과로 이루어짐

  • 애플리케이션은 보통 하나의 작업을 수행하기 위해 여러 HTTP 트랜잭션을 수행함
    Ex. 하나의 웹 페이지는 리소스의 모음이기 때문에 각각의 리소스를 가져오기 위한 여러개의 트랜잭션이 필요


✔ 메서드

  • 모든 HTTP 요청 메시지는 한개의 메서드를 가짐

  • 서버에게 어떤 동작이 취해져야하는지 말해주는 역할
    Ex. GET / PUT / DELETE / POST / HEAD


✔ 상태코드

  • 모든 HTTP 응답 메시지는 상태 코드와 함께 반환됨

  • 숫자 상태코드와 함께 텍스트의 사유 구절도 함께 보냄
    Ex. 200 OK / 200 Success 모두 같은 것


✔ 메시지

  • 요청 메시지응답 메시지로 나뉨
    • 요청 메시지
      ➜ 웹 클라이언트 -> 서버로 보낸 HTTP 메시지
    • 응답 메시지
      ➜ 서버 -> 웹 클라이언트로 가는 메시지
  • 시작줄 / 헤더 / 본문 으로 나뉨
    • 시작줄
      ➜ 메시지의 첫 줄 / 요청 - 무엇을 해야하는지 / 응답 - 무슨 일이 일어났는지
      Ex. GET /example.html HTTP/1.0
    • 헤더
      ➜ 쌍점(:)으로 구분되어있는 하나의 이름과 하나의 값으로 구성
      ➜ 꼭 빈줄(CRLF)로 끝남
      Ex. 응답 본문 길이는 Content-Length 헤더 / 문서의 MIME 타입은 Content-Type 헤더
    • 본문
      ➜ 요청 - 웹 서버로 데이터를 실어 보냄 / 응답 - 클라이언트로 데이터를 반환

✏️ TCP 커넥션

HTTP는 애플리케이션 계층 프로토콜이고, 네트워크 통신의 핵심적인 세부사항에 대해서는 신경쓰지 않음

👉 TCP/IP 에게 맡김

✔ TCP/IP

  • TCP와 IP가 층을 이루는, 패킷 교환 네트워크 프로토콜의 집합

  • 대중적이고 신뢰성있는 인터넷 전송 프로토콜

  • 어떤 종류의 컴퓨터/네트워크든 신뢰성있는 의사소통을 가능하게 함

  • 한 번 TCP 커넥션이 맺어지면,
    클라이언트 - 서버 간 교환되는 메세지가 실종/손상되고, 불규칙한 순서로 수신되는 일은 결코 없음

✔️ TCP/IP 장점

  • 오류없는 데이터 전송
  • 보낸 순서대로 데이터 전달
  • 조각나지 않는 데이터 스트림 ( 언제든 어떤 크기로든 보낼 수 있음 )

TCP/IP 커넥션을 맺기 위해서는 서버 컴퓨터의 인터넷 프로토콜(IP) 주소와 그 서버에서 실행중인 프로그램이 사용 중인 포트번호가 필요

👉 URL을 이용해서 IP 주소와 포트번호를 알아낼 수 있음

✔️ 호스트명

  • IP 주소에 대한 이해하기 쉬운 형태의 별명

✔ TCP/IP 커넥션을 맺는 간략적인 순서

  1. 웹브라우저가 서버의 URL에서 호스트명 추출

  2. 웹브라우저가 추출한 호스트명을 IP로 변환

  3. 웹브라우저가 URL에서 포트번호 추출 ( 있다면 )

  4. 웹브라우저가 웹 서버와 TCP 커넥션을 맺음

  5. 웹브라우저가 서버에 HTTP 요청

  6. 서버가 클라이언트에게 HTTP 응답

  7. 커넥션이 닫히고 웹브라우저가 문서를 보여줌


✔ 프로토콜 버전

HTTP/0.9

  • HTTP의 프로토타입 버전
  • GET 메소드만 존재하며 MIME 타입이나, 헤더 등이 존재하지 않았음
  • 단순히 html 객체를 받아오기 위해 만들어진 버전으로, 금방 HTTP/1.0으로 대체되었음

HTTP/1.0

  • 처음으로 널리 쓰이기 시작한 HTTP 버전
  • 헤더, 추가 메소드, 멀티미디어 객체 처리를 추가
  • HTTP/1.0으로 시각적으로 매력적인 웹페이지와 상호작용하는 폼을 실현하였고, 이는 월드 와이드 웹(www)을 대세로 만들었음

HTTP/1.0+

  • www이 성공함에 따라 여러 요구를 만족시키기 위해 여러가지 기능들을 공식적이지는 않지만 사실상 표준으로 HTTP에 추가
    Ex. keep-alive 커넥션, 가상 호스팅 지원, 프록시 연결 지원 등
  • 이 규격 외의 확장된 HTTP 버전을 HTTP/1.0+라고 부름

HTTP/1.1

  • HTTP 설계의 구조적 결함 교정, 두드러진 성능 최적화, 잘못된 기능 제거에 집중한 버전
  • 더 복잡해진 웹 애플리케이션과 배포 지원
  • 현재 널리 쓰이는 HTTP 버전

HTTP/2.0

  • HTTP/1.1 성능 문제를 개선하기 위해 구글의 SPDY 프로토콜을 기반으로 설계
  • 대표적인 특징들로는 헤더의 압축, 클라이언트가 추가로 요청하지 않은 리소스를 추후에 서버가 주는 Server push, HOL Blocking 문제 해결, Stream 우선순위 지정 등

HTTP/3.0

  • TCP 기반으로 통신하던 기존 HTTP와 달리 UDP 기반의 QUIC 프로토콜로 통신
  • UDP 위에 새로운 전송계층을 추가함으로써 패킷 재전송, 혼잡 제어, 속도 제어 등 여러가지 기능을 제공한다고 함

✏️ 웹의 구성요소

✔ 프락시

  • 클라이언트 - 서버 사이에 위치한 HTTP 중개자

  • 클라이언트이 모든 HTTP 요청을 받아 서버에 전달 ( 대개 요청을 수정한 뒤에 )

  • 사용자를 대신해 서버에 접근

  • 주로 보안을 위해 사용

  • 요청 / 응답을 필터링
    Ex. 성인 콘텐츠 차단

✔ 캐시

  • 자신을 거쳐가는 문서들 중 자주 찾는 것의 사본을 클라이언트 가까이에 보관하는 HTTP 창고

  • 다음 번에 클라이언트가 같은 문서를 요청하면 서버에서 가져오는 것 보다 훨씬 더 빠르게 사본을 가져올 수 있음

✔ 게이트웨이

  • 다른 애플리케이션과 연결된 특별한 웹 서버

  • 다른 서버들의 중개자로 동작

  • 주로 HTTP 트래픽을 다른 프로토콜로 변환하기 위해 사용

    Ex. HTTP/FTP 게이트웨이
    ➜ HTTP 클라이언트와 FTP 서버 사이에 위치하여,
    HTTP 요청을 받아들인 뒤, FTP 프로토콜을 이용해 문서를 가져오고 /
    받아온 문서는 HTTP 메세지에 담겨 클라이언트에게 보냄

✔ 터널

  • 단순히 HTTP 통신을 전달하기만 하는 특별한 프락시

  • 두 커넥션 사이에서 데이터를 열어보지 않고 그대로 전달

  • 주로 비 HTTP 데이터를 하나 이상의 HTTP 연결을 통해 그대로 전송해주기 위해 사용

    Ex. 암호화된 SSL 트래픽을 HTTP 커넥션으로 전송하여 웹 트래픽만 허용하는 사내 방화벽을 통과시키는 것
    ➜ HTTP 요청을 받아들여 목적지의 주소와 포트번호로 커넥션을 맺고, 이후부터는 암호화된 SSL 트래픽을 HTTP 채널을 통해 목적지 서버로 전송 가능하게 됨

✔ 에이전트

  • 자동화된 HTTP 요청을 만드는 준지능적(semi-intelligent) 웹클라이언트 프로그램

Ex. 사람의 통제 없이 스스로 웹을 돌아다니며 HTTP 트랜잭션을 일으키고 콘텐츠를 받아오는 스파이더나 웹 로봇

✔️ 스파이더
➜ 웹을 돌아니며, 검색엔진의 디이터베이스나 가격비교 로봇을 위한 제품 카탈로그와 같은 유용한 웹 콘텐츠 보관소를 만듦

0개의 댓글