[HTTP] 기초
이 포스트는 “HTTP 완벽가이드”의 “1장, HTTP 개관”을 정리한 내용입니다.
HTTP
- HTTP는 신뢰성 있는 데이터 전송 프로토콜
- 개발자는 HTTP 통신 중 파일이 파괴, 중복, 왜곡되는 것을 걱정할 필요 없음
- 개발자는 인터넷의 결함이나 약점에 대한 걱정 없이 어플리케이션의 고유 기능을 구현하는데 집중
웹 클라이언트와 서버
- 클라이언트 / 서버
- 웹 서버로 HTTP 요청이 들어오면 서버는 요청에 해당하는 객체를 찾아 타입, 길이 정보등을 포함하여 HTTP 응답
리소스
- 웹서버는 리소스를 관리하고 제공
- HTML, TXT, WORD, PDF, JPEG, AVI …
- 리소스는 꼭 정적 파일일 필요 없음
- 어떤 종류의 콘텐츠 소스도 리소스가 될 수 있음
- 인터넷 검색엔진 역시 리소스
미디어 타입
- HTTP는 웹에서 전송되는 객체 각각에 MIME 타입이라는 데이터 포맷 라벨이 붙음
- MIME(Multipurpose Internet Mail Extensions, 다목적 인터넷 메일 확장)
- MIME는 메일 시스템 사이에서 메시지 전송 중의 문제를 해결하기 위해 설계
- 메일에서 잘 동작하여 HTTP에서도 채택
- 사선(/)으로 구분된 주 타입, 부타입으로 이루어짐 text/html, text/plain, image/jpeg, image/gif …
URI
- 자원 식별자(uniform resource identifier), URI
URL
- uniform resource locator
- 리소스에 대한 구체적인 위치를 서술
- 스킴, 서버의 인터넷 주소, 웹서버의 리소스로 이루어짐
URN
- uniform resource name
- 콘텐츠를 이루는 한 리소스에 대해, 리소스의 위치에 영향을 받지 않는 유일무이한 이름 역할
- 리소스의 위치를 변경하여도 문제없이 동작
- 실험중인 상태 아직 널리 채택되지 않음
트랜잭션
- HTTP 트랜잭션은 요청 명령과 응답 명령으로 구성
메서드
- HTTP 메서드라 불리는 여러 종류의 요청 명령을 지원
- HTTP요청은 한 개의 메서드를 가짐
- GET, PUT, DELETE, POST, HEAD
상태코드
- 모든 HTTP 응답 메시지는 상태 코드와 함께 반환
- 200, 302, 404
- HTTP는 각 숫자 상태 코드에 텍스트로된 구문도 함께 전송
- 실제 응답 처리에는 숫자로 된 코드 사용
웹페이지의 구성
- 하나의 작업을 수행하기 위해 여러 HTTP 트랜잭션을 수행
- 페이지 레이아웃을 서술하는 HTML ‘뼈대’를 가져온 뒤,
- 첨부된 리소스들을 가져오기 위해 HTTP 트랜잭션들을 수행
메시지
- HTTP 메시지는 단순한 줄 단위의 문자열
- 일반 텍스트, 사람이 읽고 쓰기 쉬움
- 시작줄:
** 요청이라면 무엇을 해야하는지, 응답이라면 무슨 일이 일어났는지 표기 - 헤더:
** 시작줄 다음에는 0개 이상의 헤더 필드가 이어짐
** 각 헤더 필드는 콜론으로 구분된 키/벨류 페어
** 헤더는 빈줄로 끝남 - 본문:
** 빈 줄 다음에는 어떤 종류의 데이터든 들어갈 수 있음
TCP 커넥션
- HTTP는 TCP/IP 위에 존재
- TCP는 오류 없는 데이터 전송, 순서, 데이터의 스트림을 보장
- HTTP URL에 포트번호가 빠진 경우는 기본 값(80)으로 가정
웹의 구성 요소
프락시
- 웹 보안, 어플리케이션 통합, 성능 최적화를 위한 구성요소
- 클라이언트와 서버 사이에 위치
- 클라이언트의 모든 HTTP 요청을 받아 서버에 전달
- 사용자를 위한 프락시로 사용자를 대신해 서버에 접근
- 주로 보안을 위해 사용, 모든 웹 트래픽 흐름 속에서 신뢰할 만한 중개자 역할
- 요청과 응답을 필터링할 수 있음
캐시
- 자주 찾는 것의 사본을 저장해 두는, 특별한 종류의 HTTP 프락시 서버
- 훨씬 더 빨리 문서를 다운로드 가능하게 해줌
- HTTP는 캐시를 효율적으로 동작하게 하고, 캐시된 콘텐츠를 최신버전으로 유지하며 동시에 프라이버시도 보호하게 하는 많은 기능을 정의
게이트웨이
- 다른 서버들의 중개자로 동작하는 특별한 서버
- HTTP 트래픽을 다른 프로토콜로 변한하기 위해 사용
- 게이트웨이는 언제나 스스로가 리소스를 가지고 있는 진짜 서버인 것처럼 요청을 다룸
터널
- 터널은 raw 데이터를 열어보지 않고 그대로 전달
- HTTP 터널은 주로 비 HTTP 데이터를 하나 이상의 HTTP 연결을 통해 그대로 전송해주기 위해 사용
에이전트
- 사용자 에이전트는 사용자를 위해 HTTP 요청을 만들어주는 클라이언트 프로그램
- 웹브라우저, 스파이더 …
- 스파이더: 사용자의 통제 없이 스스로 웹을 돌아다니며 HTTP 트랜잭션을 일으키고 콘텐츠를 받아오는 자동화된 사용자 에이전트
출처: "HTTP 완벽가이드", 이응준, 정상일 옮김, 인사이트, 2014