HTTP 1장 개관

황상진·2022년 7월 18일
1

HTTP

목록 보기
2/5
post-thumbnail

HTTP 1장 개관

목표

  • 얼마나 많은 클라이언트와 서버가 통신하는가
  • 리소스(웹 콘텐츠)가 어디서 오는지
  • 웹 트랜잭션이 어떻게 동작하는지
  • HTTP 통신을 위해 사용하는 메시지의 형식
  • HTTP 기저의 TCP 네트워크 전송
  • 여러 종류의 HTTP 프로토콜
  • 인터넷 곳곳에 설치된 다양한 HTTP 구성 요소

HTTP : 인터넷의 멀티미디어 배달부

  • HTTP는 전 세계의 웹 서버로부터 자원들을 클라이언트들의 웹 브라우저로 옮겨줌
  • 신뢰성 있는 데이터 전송 프로토콜을 사용하기 때문에, 데이터 손상의 염려는 ✕

웹 클라이언트와 서버

  • 월드 와이드 웹의 기본 요소
  • 웹 서버
    - HTTP 프로토콜로 의사소통하기 때문에 보통 HTTP 서버라고 불림
    - 인터넷의 데이터를 저장, HTTP 클라이언트가 요청한 데이터 제공

리소스

  • 웹 콘텐츠의 원천. 웹 서버가 이를 관리하고 제공함
  • 정적 파일, 요청에 따라 콘텐츠를 생산하는 프로그램 모두 리소스
  • 정적 파일 EX) 텍스트/HTML/마이크로소프트 워드/어도비 아크로뱃/JPEG 이미지/AVI 동영상 파일

1. 미디어 타입

  • HTTP는 웹에서 전송되는 객체 각각에 MIME 타입이라는 데이터 포맷 라벨을 붙임
    • MIME
      - Multipurpose Internet Mail Extensions의 약자
      - 전자메일 시스템에서 유래. 멀티미디어 콘텐츠를 기술하고 라벨을 붙이기 위해 채택
      • 사선(/)으로 구분된 주 타입과 부 타입으로 이루어진 문자열 라벨
      • HTML→text/html
        plain ASCII→text/plain
        JPEG→image/jpeg
        apple quick time player→video/quicktime
      

2. URI

  • 서버 리소스, 통합 자원 식별자(uniform resource identifier)
  • 인터넷의 우편물 주소, 정보 리소스를 고유하게 식별하고 위치를 지정함
  • HTTP는 주어진 URI로 객체를 찾아옴
  • 종류는 URL과 URN

URI의 구조

scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]

  1. scheme : 사용할 프로토콜을 뜻하며 웹에서는 http 또는 https를 사용
  2. user와 password : (서버에 있는) 데이터에 접근하기 위한 사용자의 이름과 비밀번호
  3. host와 port : 접근할 대상(서버)의 호스트명과 포트번호
  4. path : 접근할 대상(서버)의 경로에 대한 상세 정보
  5. query : 접근할 대상에 전달하는 추가적인 정보 (파라미터)
  6. fragment : 메인 리소스 내에 존재하는 서브 리소스에 접근할 때 이를 식별하기 위한 정보

URL

  • 통합 자원 지시자(uniform resouce locator)
  • 오늘날 대부분의 URI, 통상적인 관례로 URI와 URL은 같은 의미로 사용함
  • 특정 서버의 한 리소스에 대한 구체적인 위치를 서술 (리소스의 위치, 접근방법 표현)
  • URL의 세 부분
    - 스킴(scheme), 첫 번째 부분, 리소스 접근을 위해 사용되는 프로토콜 서술
    - 두 번째 부분, 인터넷 주소 제공
    - 마지막 부분, 웹 서버의 리소스 가리킴

URN

  • 유니폼 리소스 이름(uniform resource name), 위치 독립적인 유일한 이름, 실험 중인 상태
  • 콘텐츠를 이루는 한 리소스에 대해, 그 리소스 위치에 영향 받지 않는 유일한 이름
  • 리소스가 이름 유지만 한다면, 여러 종류의 네트워크 접속 프로토콜로 접근해도 문제 없음

트랜잭션

  • HTTP 트랜젝션은 요청 명령(클라이언트→서버)과 응답 결과(서버→클라이언트)로 구성
  • 위 상호작용은 HTTP 메시지라고 불리는 정형화된 데이터 덩어리를 이용

1. 메서드

  • HTTP 메서드, HTTP가 지원하는 여러 가지 종류의 요청 명령
  • 모든 HTTP 요청 메시지는 한 개의 메서드를 가짐
  • 메서드는 서버에게 어떤 동작이 취해져야 하는지 말해줌

2. 상태코드

웹페이지는 여러 객체로 이루어질 수 있다

  • 애플리케이션은 보통 하나의 작업을 수행하기 위해 여러 HTTP 트랜젝션을 수행함

메시지

  • HTTP 메시지, 단순한 줄 단위의 문자열, 일반 텍스트 형식
  • 요청 메시지와 응답 메시지 두 가지 뿐
  • HTTP 메시지의 세 부분
    - 시작줄: 메시지의 첫 줄, 요청이라면 해야 할 일, 응답이라면 일어난 일 나타냄
    - 헤더: 시작줄 다음 줄, 0개 이상의 헤더 필드가 이어짐, 쌍점(:)으로 구분되어 있는 하나 값과 이름으로 구성, 빈 줄로 끝남
    - 본문: 어떤 종류의 데이터든 들어갈 수 있음, 웹 서버로 데이터 실어 보냄

TCP 커넥션

  • TCP(Transmission Control Protocol, 전송 제어 프로토콜)를 이용해 한 곳에서 다른 곳으로 옮겨가는 것을 뜻한다.

1. TCP/IP

  • HTTP는 애플리케이션 계층 프로토콜이다.
  • 애플리케이션 계층은 HTTP 프로토콜 계층 중에서도 최상단에 위치한다.
  • HTTP가 신경쓰지 않는 네트워크 통신의 핵심 세부사항에 대해 관리
  • TCP/IP는 TCP와 IP가 층을 이루는, 패킷 교환 네트워크 프로토콜의 집합, TCP가 더 위의 계층
  • 각 네트워크와 하드웨어의 특성을 숨기고 종류에 상관 없이 신뢰성 있는 의사소통을 가능하게 함
  • TCP가 제공하는 것
    1. 오류 없는 데이터 전송
    2. 순서에 맞는 전달 (데이터는 언제나 보낸 순서대로 도착)
    3. 조각나지 않는 데이터 스트림 (언제든 어떤 크기로든 보내기 가능)

https://brunch.co.kr/@wangho/6

접속, IP 주소 그리고 포트 번호

  • 전송을 위해서는 인터넷 프로토콜 주소와 포트번호를 사용해 클라이언트와 서버 사이 TCP/IP 커넥션이 필요
  • URL은 그 리소스를 가지고 있는 장비에 대한 IP 주소를 알려줄 수 있음

만약 http://www.netscape.com:80/index.html 이라는 URL이 있다고 가정하자.
그러면 TCP 커넥션이 이루어지는 과정은 다음과 같다.

순서
1) 웹브라우저는 서버의 URL에서 호스트 명 추출 (www.netscape.com)
2) 웹브라우저는 서버의 호스트 명을 IP로 변환 (www.netscape.com => 207.200.83.29)
3) 웹브라우저는 URL에서 포트번호가 존재한다면 추출 (:80)
4) 웹브라우저는 웹 서버와 TCP 커넥션을 맺음
5) 웹브라우저는 서버에 HTTP 요청을 보냄
6) 서버는 웹 브라우저에 HTTP 응답을 돌려줌
7) 커넥션이 닫히면, 웹브라우저는 문서를 보여줌

프로토콜 버전

  • HTTP/0.9
    - 간단한 HTML 객체를 받아오기 위해 만들어짐
    - 심각한 디자인 결함이 다수 있음
    - 구식 클라이언트와만 사용 가능
    - GET메서드만 지원

  • HTTP/1.0
    - 처음으로 널리 쓰이기 시작한 버전
    - 추가된 지원 (버전 번호, 헤더, 추가 메서드, 멀티미디어 객체 처리)
    - 잘 정의된 명세는 아님

  • HTTP/1.0+
    - 상업적 성공에 따른 요구를 만족시키기 위해 기능을 추가한 버전

  • HTTP/1.1
    - HTTP 설계의 구조적 결함 교정, 성능 최적화, 잘못된 기능 제거에 집중된 버전

  • HTTP/2.0
    - 성능 문제 개선을 위해 구글의 SPDY 프로토콜을 기반으로 설계가 진행중인 프로토콜

웹의 구성 요소

  • 여기서는 웹 상호작용을 위한 여러 웹 애플리케이션들을 대해 간략하게 소개한다.

1. 프락시

  • 프락시는 클라이언트와 서버 사이에 위치한 HTTP 중재자이다. 
  • 트래픽 처리시 신뢰할 만한 중재자 역할로 보안 목적으로 사용된다.
  • 또한 바이러스나 성인물 차단을 위한 필터링 역할도 한다.

2. 캐시

  • 많이 찾는 웹페이지를 클라이언트 가까이에 보관하는 HTTP 창고
  • 특별한 종류의 HTTP 프락시 서버
  • 다음번에 클라이언트가 같은 문서를 요청하면 그 캐시가 갖고 있는 사본을 받을 수 있음
  • HTTP는, 캐시를 효율적으로 동작하게 하고 캐시된 콘텐츠를 최신 버전으로 유지하면서 동시에 프라이버시 보호를 위한 많은 기능을 정의한다.

3. 게이트웨이

  • 게이트웨이는 다른 서버들의 중개자로 동작하는 특별한 서버다.
  • 주로 HTTP 트래픽을 다른 프로토콜로 변환하기 위해 사용된다.
  • 이처럼 게이트웨이는 진짜 서버인 것처럼 요청을 다루기 때문에 클라이언트는 게이트웨이랑 통신하고 있음을 알아차리기 힘들다.

4. 터널

  • 터널은 두 커넥션 사이에 raw 데이터를 열어보지 않고 그대로 전달해주는 HTTP 어플리케이션이다.
  • HTTP 터널은 주로 비 HTTP 데이터를 하나 이상의 HTTP 연결을 통해 그대로 전송해주기 위해 사용된다.
  • 대표적인 예로 암호화된 SSL 트래픽을 HTTP 커넥션으로 전송함으로써 웹 트래픽만 허용하는 방화벽을 통과시키는 것이 있다.

SSL

  • Secure Sockets Layer
  • 암호화 기반 인터넷 보안 프로토콜
  • SSL/TLS를 사용하는 웹사이트의 URL에는 "HTTP" 대신 "HTTPS"가 있습니다.

5. 에이전트

  • 에이전트는 사용자를 위해 HTTP 요청을 만들어주는 클라이언트 프로그램이다.
  • 웹 요청을 만드는 애플리케이션은 뭐든 HTTP 에이전트이다.
  • 대표적으로 우리가 자주 사용하는 웹 브라우저를 예로 들 수 있다.
  • 자동화된 에이전트도 있는데 사람의 통제 없이 스스로 웹을 돌아다니며 트랜잭션을 일으키고 콘텐츠를 받아온다.
  • 이러한 에이전트는 보통 '스파이더'나 '웹로봇'과 같이 다채로운 이름을 가지고 있다.

출처: https://lipcoder.tistory.com/502 [기록공간:티스토리]

profile
Web FrontEnd Developer

0개의 댓글