teklog

HTTP 완벽 가이드 1 - HTTP: 웹의 기초

2024/03/05

n°49

category : HTTP

img



최근 네트워크 기본이 좀 부족하다고 느낀 일이 있어서 처음부터 다시 읽기 시작했다. 챕터 순으로 손필기와 함께 요약해가며 정독 후, 다시 내용을 복기하며 작성한 글이다. 과정에서 생긴 궁금증이나 혼동되는 개념은 검색하고 추가 작성했다. 또한 내용을 이해하기에 더 적절한 순서로 챕터의 내용을 편집하여 작성했다. (복붙 필사기계가 의미가 있을까 싶어 나름 머리를 굴려본다.) 2분기 안으로 끝낼 예정.



1. http

http는 신뢰성 있는 데이터 전송 프로토콜이다.


전송 중 데이터가 손상되거나 꼬이지 않음을 보장한다. HTTP 통신이 전송 중 파괴, 증복, 왜곡되는 걱정을 하지 않아도 된다. 개발자는 인터넷의 결함이나 약점에 대한 걱정 없이 애플리케이션 고유의 기능 구현에 집중할 수있다.



2. 웹 서버와 웹 클라이언트

HTTP 클라이언트와 HTTP 서버는 월드 와이드 웹의 기본요소이다.


웹 서버

  • 데이터를 저장하고 HTTP 클라이언트가 요청한 데이터를 응답으로 돌려준다
  • 웹 컨텐츠(리소스)는 웹 서버에 존재
  • http 프로토콜로 의사소통하기에 보통 HTTP 서버로 불림


웹 클라이언트



3. 리소스

1. 미디어 타입 MIME 2. URI


웹 서버는 리소스를 관리/제공한다. 웹 리소스가 웹 컨텐츠의 원천이다.


  • 정적 리소스 : 텍스트, html, 워드, pdf, jpeg, avi 그 외 모든 종류의 파일을 포함
  • 동적 리소스: 요청에 따라 콘텐츠를 생산하는 프로그램이 될 수 있음. ex) 사용자, 시간, 어떤 정보를 요청했는 지에 따라 변할 수 있는 리소스. 주식 거래, 라이브 영상, 부동산 데이터 베이스 검색, 쇼핑몰에서 선물 구입 등..


결과적으로 어떠한 컨텐츠 소스도 리소스가 될 수 있다. (그렇기에 미디어 타입을 나눈다)


3-1 미디어 타입


MIME(Multipurpose Internet Mail Extensions) 타입:

HTTP는 웹에서 전송되는 객체 각각에 MIME 타입이라는 데이터 포맷 라벨을 붙인다. 앞에서 살펴보듯이, 인터넷은 수천 가지 데이터 타입을 다루기 때문이다.


  • 웹 브라우저는 서버로부터 받는 객체를 MIME 타입을 통해 확인
  • 이를 통해 이미지 파일을 보여주거나, html 파일을 분석/포맷팅, 오디오 파일 재생, 특별한 포맷을 다루기 위해 외부 플러그인을 실행함
  • HTTP 헤더의 Content-Type에 명시한다.
  • 타입은 여러가지가 있으나 "primary object type"/"specific subtype" 형식으로 표기한다.
  • HTML: text/html
  • plain ASCII 텍스트: text/plain
  • JPEG 이미지: image/jpeg
  • GIF 이미지: image/gif
  • PDF 문서 : application/pdf
  • etc..


3-2 URI

웹 서버에 있는 리소스는 각자 이름(주소)를 갖고 있고, 클라이언트는 이를 지목하여 리소스를 요청할 수 있다. 개별 서버 리소스를 URI(uniform resource identifier)라고 부른다. URI는 인터넷 상의 자원(리소스)을 고유하게 식별하고 위치를 지정하는 표준화된 방법을 제공한다. 서버 상의 각 파일, 문서, 이미지 등의 리소스는 고유한 URI를 가지며, 이를 통해 해당 리소스에 접근할 수 있다.


URL

URL은 리소스가 위치하는 리소스의 주소를 구체적으로 지정하는 형태다. 주로 3가지로 구성된다.


  • 스킴 : 프로토콜
  • 주소 : 서버의 인터넷 주소
  • 리소스 : 리소스의 위치


http://www.example.com/sample/sample_image.jpeg

스킴 : http 프로토콜을 사용하여

주소 : www.example.com로 이동하여

리소스 : /sample/sample_image.jpeg라는 리소스를 가져오시오


추가 내용

스킴://호스트:포트/경로?쿼리#프래그먼트


  • 스킴(scheme): 리소스에 접근하기 위한 프로토콜. httphttpsftp 등 여러 프로토콜이 있음.
  • 호스트(host): 리소스가 호스팅되는 서버의 도메인 이름, IP 주소
  • 포트(port): 서버에서 리소스에 접근하기 위해 사용되는 포트 번호. 일반적으로는 생략되며, 생략된 경우 기본 포트가 사용됨 (예: HTTP의 경우 80, HTTPS의 경우 443).
  • 경로(path): 서버 내에서 리소스의 위치
  • 쿼리(query): 선택적으로 리소스에 대한 추가적인 질의를 제공합니다. ?로 시작하며, 키=값 쌍의 형태로 정보를 전달
  • 프래그먼트(fragment): 리소스 내의 특정 부분을 가리키는 선택적인 구성 요소. #로 시작.


URN

리소스의 위치와 무관하게 리소스를 고유하게 식별하는 URI(Uniform Resource Identifier)의 한 형태. 리소스 위치 대신, 이름을 기반으로 그 자체의 고유성 제공. 예를 들어 RFC(Request for Comments), ISBN(International Standard Book Number) 등이 있다. ex) urn:ietf:rfc:2141



4. 트랜잭션

클라이언트가 웹 서버와 리소스를 주고 받기 위해 HTTP를 사용하는 법


HTTP 트랜잭션


  • 요청 명령과 응답 결과로 구성
  • 요청/응답의 상호작용은 HTTP 메시지라는 데이터 덩어리를 통해 이루어짐
  • 요청 메시지, 응답 메시지를 통해 요청/응답의 트랜젝션
  • ex) 한 개의 웹페이지는 여러 HTTP 트랜젝션을 수행한다
  • html을 요청하고 응답을 받는다
  • html에서 link, script 등의 태그를 통해 이미지, 스타일, js 스크립트 등 여러 리소스를 요청한다.
  • 대부분의 경우 하나의 웹페이지는 하나의 리소스가 아닌 리소스의 모음이다.



5. HTTP 메시지


각 소항목의 내용들은 Chapter 3에서 더 자세히 다룰 예정이다. 개괄적으로 보면 다음과 같다.


  • HTTP 메시지는 단순한 줄 단위의 문자열이다.
  • 요청, 응답 메시지 이외에 HTTP 메시지는 없다.
  • 요청 메시지: 클라이언트에서 서버로 보내는 메시지
  • 응답 메시지: 서버에서 클라이언트로 보내는 메시지


HTTP 메시지는 3가지로 구성된다.


1. 시작줄

메시지의 첫 줄에 해당하며, 요청/응답은 다음과 같이 구성된다.


`GET /index.html HTTP/1.1` 

요청 메시지 : HTTP 메서드 / 요청 대상(URI) / HTTP 버전

- `HTTP/1.1 200 OK` 

응답 메시지 : HTTP 버전 / 상태 코드


요청 메서드

모든 HTTP 요청 메시지는 하나의 메서드를 갖는다. HTTP 요청 메서드는 클라이언트가 서버에 어떤 종류의 동작을 요청하는지를 나타내는 데 사용된다.


  • GET: 특정 리소스를 조회하기 위한 요청
  • POST: 서버에 리소스를 생성하도록 요청
  • PUT: 지정된 URI에 리소스를 저장하도록 서버에 요청
  • DELETE: 지정된 URI의 리소스를 삭제하도록 요청
  • HEAD: GET과 유사하지만, 응답 본문(body) 없이 헤더(header) 정보만을 요청. 리소스의 메타데이터를 조회할 때 사용.


응답 상태 코드

모든 HTTP 응답 메시지는 상태 코드와 함께 반환된다. 서버가 클라이언트의 요청을 어떻게 처리했는지를 나타내는 숫자 코드이다


  • 200 OK: 요청이 성공적으로 처리되었음을 나타냠. 이는 가장 일반적인 성공 응답 코드.
  • 302 Found (Temporary Redirect): 이 상태 코드는 요청한 리소스가 일시적으로 다른 URI로 이동되었음을 나타냄. 클라이언트는 이 새 URI로 리디렉션.
  • 404 Not Found: 서버가 요청한 리소스를 찾을 수 없음. 클라이언트가 잘못된 URI를 요청했거나, 요청한 리소스가 삭제되어 더 이상 사용할 수 없을 때 반환.


2. 헤더


  • 시작 줄 다음 0개 이상의 헤더 필드가 이어진다. (문자열로 구성)
  • 콜론":"으로 구분된 키, 밸류로 구성된다.
  • 헤더를 추가하기 위해 한 줄을 더하면 된다.
  • 헤더는 빈줄로 끝난다.


3. 본문


  • 어떤 종류의 데이터든 들어갈 수 있는 메시지 본문
  • 요청 본문 : 웹서버로 데이터를 전송
  • 응답 본문: 클라이언트로 데이터 반환
  • 텍스트, 임의의 이진 데이터(이미지, 비디오, 오디오, 애플리케이션)를 포함할 수 있다.


6. TCP 커넥션

HTTP 메시지는 TCP(Transmission Control Protocol) 커넥션을 통해 한곳에서 다른 곳으로 옮겨진다.


1. TCP/IP


HTTP

  • application 계층 프로토콜
  • 네트워크 통신의 핵심 세부사항은 신경쓰지 않는다
  • 이에 관한 것은 인터넷 전송 프로토콜 TCP/IP에 맡긴다


TCP

  • 전송 계층
  • 오류 없는 데이터 전송
  • 순서에 맞는 전달 (데이터는 언제나 보낸 순서대로 도착)
  • 조각나지 않는 데이터 스트림 (언제든 어떤 크기로든 보낼 수 있음)
  • 네트워크 개념 상 IP 위의 계층이다.


TCP/IP

  • 인터넷 자체가 TCP/IP에 기초하고 있다
  • TCP/IP는 TCP와 IP가 층을 이루는 '패킷 교환 네트워크 프로토콜 집합'
  • 각 네트워크와 하드웨어 특성을 숨기고, 어떤 종류의 컴퓨터나 네트워크든 서로 통신하게 해준다


TCP 커넥션이 맺어지면, 클라이언트와 서버 간에 교환되는 메시지가 없어지거나, 손상되거나, 순서가 바뀌지 않는다.


*네트워크 계층 더 알아보기


IP

  • 기능: 네트워크 계층에서 IP는 데이터 패킷을 송신지에서 목적지까지 전달하는 역할. 각 디바이스는 고유한 IP 주소를 가지며, 이 주소를 사용하여 데이터를 정확한 목적지로 라우팅.
  • 목적: IP는 전 세계적으로 연결된 다양한 네트워크 상에서 데이터를 안전하고 효율적으로 전송하기 위한 표준 수단을 제공. 패킷 스위칭 기술을 사용하여 정보를 패킷 형태로 분할하고, 이를 네트워크를 통해 전송.


링크 인터페이스

  • 기능: 링크 인터페이스는 특정 네트워크 매체(예: 이더넷, Wi-Fi)를 통해 데이터를 전송하는 물리적 또는 논리적 장치이다. 네트워크 어댑터나 네트워크 인터페이스 카드(NIC)가 이에 해당.
  • 목적: 링크 인터페이스는 다양한 네트워크 기술과 프로토콜을 사용하여, 디바이스가 로컬 네트워크에 연결되고, 데이터를 교환할 수 있게함. 각각의 인터페이스는 해당 네트워크 매체의 특성에 맞는 신호 변환, 속도 조정, 에러 처리 등의 기능을 수행.


네트워크 하드웨어


  • 기능: 물리적 네트워크 하드웨어는 네트워크 연결과 데이터 전송을 가능하게 하는 실제 장비를 말한다. 여기에는 라우터, 스위치, 허브, 모뎀 등이 포함.
  • 목적: 네트워크 상에서 데이터를 올바른 목적지로 라우팅하고, 네트워크의 다른 부분과 연결성을 제공. 물리적 하드웨어는 데이터를 전기적, 광학적 또는 무선 신호로 변환하고, 이러한 신호를 네트워크를 통해 전송하는 역할.


2. 접속, IP 주소, 포트 번호


HTTP 클라이언트가 서버에 메시지를 전송하기 전에 IP 주소와 포트번호를 사용하여 TCP/IP 커넥션을 맺어야한다.


  • IP: 호스트 명 (도메인 이름)에서 추출한다. 보통 DNS를 통해 쉽게 IP로 변환된다.
  • 포트 번호: 보통 생략되는 경우가 많다. http-80, https-443이 기본값


과정

  1. 웹 브라우저는 서버의 URL에서 호스트 명을 추출
  2. 웹 브라우저는 서버의 호스트 명을 IP로 변환
  3. 웹 브라우저는 URL에서 포트번호를 추출
  4. IP, 포트번호를 통해 브라우저가 TCP 커넥션을 맺음
  5. 브라우저는 서버에 HTTP 요청을 보냄
  6. 서버는 브라우저에 HTTP 응답을 돌려줌
  7. 커넥션이 닫힘
  8. 브라우저는 문서를 보여줌



7. 웹 구성요소

각 요소는 추후 챕터에서 더 자세히 다룰 예정이다


1. 프록시

클라이언트와 서버 사이에 위치한 HTTP 중계자


  • 웹 보안, 애플리케이션 통합, 성능 최적화를 위해 사용된다
  • 클라이언트와 서버 사이에 위치하여 모든 HTTP 요청을 받아 (요청을 수정한 뒤에) 서버에 전달함
  • 사용자를 위한 중재자로 동작하며 사용자를 대신하여 서버에 접근
  • 주로 보안을 위해 사용
  • 요청과 응답을 필터링할 수 있다


2. 캐시

많이 찾는 웹 페이지를 클라이언트 가까이 보관하는 HTTP 창고


  • 웹 캐시와 캐시 프록시는 자신을 거쳐가는 문서 중 자주 찾는 것의 사본을 저장한다.
  • 서버보다 클라이언트에 더 가까이 위치한다.


HTTP 캐시의 장점


  • 캐시를 효율적으로 저장
  • 캐시된 컨텐츠를 최신 버전으로 유지
  • 프라이버시를 보호하기 위한 많은 기능을 정의


추가 내용: 캐시와 관련된 용어가 많이 사용되어 단어들을 찾아봤다.


  • HTTP 캐시: HTTP 프로토콜을 사용하여 웹 콘텐츠를 캐시하는 모든 종류의 캐시를 포함하는 광범위한 용어
  • 웹 캐시(Web Cache): 일반적으로 웹 문서(HTML 페이지, 이미지 등)의 사본을 저장하는 메커니즘을 가리키며, 이는 브라우저 혹은 서버 측 캐시를 포함한다.
  • 캐시 프록시(Cache Proxy): 캐싱을 주 목적으로 하는 HTTP 프록시 서버의 한 종류
  • 브라우저 캐시(Browser Cache): 웹 브라우저에 의해 클라이언트 측에서 사용되는 캐시로, 사용자가 방문한 웹 페이지의 사본을 로컬에 저장.


3. 게이트웨이

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


  • 다른 서버들의 중개자로 동작하는 특별한 서버
  • 주로 HTTP 트래픽을 다른 프로토콜로 변환하기 위해 사용
  • 언제나 스스로가 리소스를 갖은 진짜 서버처럼 요청을 다룬다.
  • 클라이언트에서 게이트웨이와 웹서버를 분간하지 못한다
  • ex) HTTP/FTP 게이트웨이는 FTP URI에 대한 HTTP 요청을 받아서 FTP 프로토콜을 사용해 리소스를 가져온다. 이 데이터는 클라이언트에 HTTP 메시지로 전달된다.


4. 터널

단순히 HTTP 통신을 전달하는 특별한 프록시


  • 두 커넥션 사이에서 raw 데이터를 열어보지 않고 그대로 전달해주는 HTTP 애플리케이션
  • 주로 비 HTTP 연결을 하나 이상의 HTTP 연결을 통해 그대로 전송해주기 위해 사용
  • ex) 암호화된 SSL 트래픽을 HTTP 커넥션으로 전송. 웹 트래픽만 허용하는 사내 방화벽. HTTP/SSL 터널은 HTTP 요청을 받아들여 목적지의 주소와 포트번호로 커넥션을 맺는다. 이후부터는 암호화된 SSL 트래픽을 HTTP 터널을 통해 목적지 서버로 전송할 수 있다.


앞선 게이트웨이와 차이점이 이해가 되지 않아 정리했다.

게이트웨이와 차이점 :

  • 게이트웨이: 중간에서 전달 받은 데이터를 필요한 형식으로 변환한다.
  • 터널 : 터널은 한 지점에서 다른 지점으로 데이터를 전달한다.
  • 터널의 주 목적은 보통 다른 프로토콜의 데이터(예: SSL/TLS로 암호화된 HTTPS 트래픽)를 HTTP 연결을 통해 전달하는 것이다
  • 요청 : 클라이언트에서 요청 (SSL) -> 프록시 서버 HTTP/SSL 터널에서 터널링 (HTTP 커넥션) -> 웹서버에 도달 (SSL)
  • 응답 : 서버에서 응답 (SSL) -> HTTP/SSL 터널 (HTTP) -> 클라이언트 도달 (SSL)
  • 터널링 과정에서 다른 프로토콜로 데이터를 변환하지 않고 "전달"만 한다


5. 에이전트

자동화된 요청을 만드는 준지능성 웹 클라이언트



  • 에이전트는 자동화된 웹 요청을 생성하고, 인터넷을 통해 데이터를 검색, 수집, 분석하는 준지능형 웹 클라이언트이다.
  • 사람의 직접적인 개입 없이도 독립적으로 행동할 수 있다. 스스로 웹을 돌아다니며 HTTP 트랜잭션을 일으키고 리소스를 받는 등 독립적으로 행동할 수 있다
  • 다양한 목적으로 사용될 수 있다.
  • 에이전트는 HTTP 프로토콜을 사용한다.
  • 요청을 만드는 애플리케이션은 무엇이든 HTTP 에이전트 될 수 있다.
  • 웹로봇(Web Robots): 웹사이트를 자동으로 탐색하고 정보를 수집하는 프로그램. 검색 엔진 최적화(SEO) 분석이나 사이트 맵 생성 등에 사용됨
  • 스파이더(Spiders)크롤러(Crawlers): 검색 엔진이 웹을 탐색하여 웹페이지 내용을 분류하고 저장하는데 사용하는 특수한 유형의 에이전트. 인터넷 상의 웹 페이지를 시스템적으로 탐색하고 데이터베이스를 구축할 수 있다.



이로써 챕터 1의 중요 내용은 모두 살펴보았다. TCP 커넥션에 대한 내용은 약간 허들이 있는 것 같아, 우선 먼저 알고 싶었던 내용들 위주로 정리하였다.