1. HTTP 개관
- HTTP(Hypertext Transfer Protocol)은 WWW(Word Wide Web)에서 통신하는 데 사용하는 프로토콜 프로그램이다.
- hypertext : 사용자에게 내용의 비순차적 검색이 가능하도록 제공되는 텍스트. 문서 내의 특정한 단어가 다른 단어나 데이터베이스와 링크되어 있어 사용자가 관련 문서를 넘나들며 원하는 정보를 얻을 수 있음. 전자 사전·멀티미디어 데이터베이스·문장 작성 시스템 등에 응용됨.
- 링크 등이 포함되어 관련문서를 넘나들며 정보를 얻을 수 있는 글
1.1 HTTP : 인터넷의 멀티미디어 배달부
- 신뢰성 있는 데이터 전송 프로토콜을 사용하기 때문에, 데이터가 지구 반대편에서 오더라도 전송 중 손상되거나 꼬이지 않음을 보장한다.
1.2 웹 클라이언트와 서버
- 웹 서버는 보통 HTTP 프로토콜로 의사소통한다.
- World Wide Web의 기본 요소 : HTTP, HTML, URL
- WWW : 인터넷을 대표하는 서비스 중 하나(구글, 네이버 등)
- 인터넷 : TCP/IP로 이루어진 네트워크들이 전세계적으로 연결된 네트워크
- 클라이언트 : 웹 브라우저
1.3 리소스
- 웹 서버는 웹 리소스를 관리하고 제공
- 웹 리소스 : 웹 콘텐츠의 원천, 웹에 콘텐츠를 제공하는 모든 것
- 단순한 리소스(정적파일) 예 : HTML, Text파일, 이미지, 동영상 등 모든 종류의 파일
- 동적 콘텐츠 : 요청 또는 사용자에 따라 다른 콘텐츠를 생성해서 제공
1.3.1 미디어 타입
- HTTP는 웹에서 전송되는 객체 각각에 MIME(Multipurpose Internet Mail Extensions, 다목적 인터넷 메일 확장) 타입이라는 데이터 포맷 라벨을 붙인다.
- Content-type : image/jpeg => MIME 타입
- HTML로 작성된 텍스트 문서 : text/html
- JPEG 이미지 : image/jpeg
- json data : application/json
- 콘텐츠를 이루는 한 리소스에 대해, 그 리소스의 위치에 영향 받지 않는 유일 무이한 이름 역할을 함
- e.g.
- urn : isbn : 1234567891234 (국제표준도서번호)
- urn : uuid : 6e8bc430-9c3a-11d9-9669-0800200c9a66 (범용 고유 식별자)
1.4 트랜잭션(상호 작용)
1.4.1 메서드
- 서버에게 어떤 동작이 취해져야 하는지 말해준다
- HTTP 요청 메세지는 한 개의 메서드를 갖는다.
- GET, PUT, DELETE, POST, HEAD, ...
1.4.2 상태 코드
- 클라이언트에게 요청이 성공했는지 아니면 추가 조치가 필요한지 알려주는 세 자리 숫자
- 모든 HTTP 응답 메세지는 상태코드와 함께 반환 됨
- e.g.
- 200 : 문서가 바르게 반환 됨
- 302 : 다시 보내세요. 다른 곳에서 리소스를 가져가십시오
- 404 : 리소스를 찾을 수 없습니다.
1.4.3 웹 페이지는 여러 객체로 이루어질 수 있다.
- 한 페이지를 표현하기 위해 여러번의 요청와 응답이 있을 수 있다는 말
1.5 메세지
/* 요청 메세지 */
// 시작줄
GET /test/hi-ther.txt HTTP/1.0
// 헤더
Accept: text/*
Accept-Language: en, fr
/* 응답 메세지 */
// 시작 줄
HTTP/1.0 200 OK
// 헤더
Content-type: text/plain
Content-length: 19
// 본문
Hi! I'm a message!
-
시작줄 : 메세지의 첫 줄
- 요청 메세지 : 무엇을 해야하는지 나타냄
- 응답 메세지 : 무슨 일이 일어났는지 나타냄
-
헤더 : 콜론(:)으로 구분되어 있는 key : value
형태
-
본문 : 문자열 구조, 텍스트 뿐만 아니라 임의의 이진 데이터를 포함할 수 있음(이미지, 오디오 등)
1.6 TCP 커넥션
- 메세지가 TCP가 커넥션을 통해 한 곳에서 다른 곳으로 옮겨가는지 알아보자
1.6.1 TCP/IP
-
HTTP는 애플리케이션 계층 프로토콜이다.
-
HTTP는 네트워크 통신의 핵심적인 세부사항에 대해서 신경 쓰지 않는다.
- 대신 대중적이고 신뢰성 있는 인터넷 전송 프로토콜(TCP/IP)에게 맡긴다.
-
TCP는 다음을 제공한다.
- 오류없는 데이터 전송
- 순서에 맞는 전달(데이터는 언제나 보낸 순서대로 도착한다)
- 조각나지 않는 데이터 스트림(언제든 어떤 크기로든 보낼 수 있다)
-
인터넷 자체가 전 세계의 컴퓨터와 네트워크 장치들 사이에서 대중적으로 사용되는 TCP/IP에 기초하고 있다.
-
TCP/IP는 TCP와 IP가 층을 이루는 패킷 교환 네트워크 프로토콜의 집합이다.
HTTP | 애플리케이션 계층 |
---|
TCP | 전송 계층 |
IP | 네트워크 계층 |
네트워크를 위한 링크 인터페이스 | 데이터 링크 계층 |
물리적인 네트워크 하드웨어 | 물리 계층 |
1.6.2 접속, IP 주소 그리고 포트번호
http://www.netscape.com/index.html
1.6.3 텔넷(Telent)을 이용한 실제 예제
- 텔넷
- 23번 포트 사용
- 원격 터미널 세션을 위해 사용되지만 HTTP 서버를 포함한 일반적인 TCP 서버에 연결하기 위해 사용될 수도 있다.
- HTTP와 같은 어플리케이션 계층의 프로토콜 종류 중 하나
- 보안 이슈
- 서버와 클라이언트 사이에 오가는 자료가 암호화 되지 않은 텍스트 형태로 전송 됨
- 텔넷을 이용하면 CLI(Command Line Interface)로 웹 서버에 쉽게 접근할 수 있는 것 같다.
1.7 프로토콜 버전
- HTTP/0.9
- 디자인 결함 많음
- 구식 클라이언트하고만 같이 사용 가능
- GET 메서드만 지원
- MIME 타입, HTTP 헤더, 버전 번호는 지원하지 않음
- 간단한 HTML객체를 받아오기 위해 만들어 짐
- HTTP/1.0
- 처음으로 널리 쓰이기 시작한 HTTP 버전
- HTTP 헤더, 추가 메서드, 멀티미디어 객체 처리를 추가
- 매ㅣ력적인 웹페이지와 상호작용하는 폼을 실현 함
- HTTP/1.0+
- 오래 지속되는 "keep-alive" 커넥션, 가상 호스팅 지원, 프락시 연결 지원을 포함해 많은 기능이 공식적이진 않지만 사실상 표준으로 HTTP에 추가 됨
- keep-alive 커넥션
- 비표준: 이 기능은 비표준이며 표준 트랙에 없습니다. 웹을 접하는 프로덕션 사이트에서는 사용하지 마십시오. 모든 사용자에게 작동하는 것은 아닙니다. 또한 구현 간에 큰 비호환성이 있을 수 있으며 향후 동작이 변경될 수 있습니다.
- 트랜잭션이 한번 일어나면 HTTP Connection이 끊기고 TCP 커넥션을 맺는데 발생하는 지연과 느린 시작 지연이 트랜잭션마다 발생해서 성능이 매우 안 좋았던 부분을 개선하기 위해 등장
- HTTP/1.1에서 Persistent connection이 디폴트로 지원되면서 사용할 필요가 없어짐
- 참고
- 더 알아보기 : https://goodgid.github.io/HTTP-Keep-Alive/
// Keep-Alive 헤더를 포함하는 응답
HTTP/1.1 200 OK
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
Date: Thu, 11 Aug 2016 15:23:13 GMT
Keep-Alive: timeout=5, max=1000
Last-Modified: Mon, 25 Jul 2016 04:32:39 GMT
Server: Apache
- HTTP/1.1
- HTTP 설계의 구조적 결함 교정, 두드러진 성능 최적화, 잘못된 기능 제거에 집중
- HTTP/2.0
1.8 웹의 구성요소
- 프락시 : 클라이언트와 서버 사이에 위치한 HTTP 중개자
- 캐시 : 많이 찾는 웹페이지를 클라이언트 가까이에 보관하는 HTTP 창고
- 게이트웨이 : 다른 애플리케이션과 연결된 특별한 웹 서버
- 터널 : 단순히 HTTP 통신을 전달하기만 하는 특별한 프락시
- 에이전트 : 자동화된 HTTP 요청을 만드는 준지능적 웹 클라이언트
1.8.1 프락시
- 클라이언트와 서버 사이에 위치
- 주로 보안을 위해 사용
- 모든 웹 트래픽 흐름 속에서 신뢰할 만한 중개자 역할을 함
- 요청과 응답을 필터링 함
- e.g., 회사에서 무언가 다운 받을 때 바이러스를 검출하거나 학생들에게서 성인 콘텐츠를 차단
- 6장에서 자세히 이야기 함
1.8.2 캐시
- 자주 찾는 것의 사본을 저장해 두는 특별한 종류의 HTTP 프락시 서버
- 7장에서 캐싱 기술에 대해 다룸
1.8.3 게이트 웨이
- 다른 서버들의 중개자로 동작하는 특별한 서버
- 주로 HTTP 트래픽을 다른 프로토콜로 변환하기 위해 사용
- 클라이언트는 자신이 게이트웨이와 통신하고 있음을 알아채지 못 함
- 8장에서 다룸
1.8.4 터널
- 두 커넥션 사이에서 raw 데이터를 열어보지 않고 그대로 전달해주는 HTTP 애플리케이션
- HTTP 데이터를 하나 이상의 HTTP 연결을 통해 그대로 전송해주기 위해 사용
- HTTP터널을 활용하는 대표적인 예
- 암호화된 SSL(Secure Socket Layer) 트래픽을 HTTP 커넥션으로 전송함으로써 웹 트래픽만 허용하는 사내 방화벽을 통과시키는 것
- 8장
HTTPS 에 대해 알아보기
1.8.5 에이전트
- 웹브라우저 뿐만 아니라 자동화된 에이전트도 있음(스파이더, 웹 로봇 등)
- 9장
1.9 시작의 끝
- 1장에선 HTTP의 멀티미디어 전송 프로토콜로서의 역할에 주목 했다.
- 남은 장들에서는 HTTP 프로토콜, 애플리케이션, 리소스의 구조에 대해 훨씬 더 자세히 설명
1.10 추가 정보
- https://www.w3.org/Protocols/
- HTTP 프로토콜에 대한 여러 훌륭한 링크를 포함
- RFC(Request For Comments)
- 미국의 국제 인터넷 표준화기구(IETF, Internet Engineering Task Force)에서 제공, 관리하는 문서
- 인터넷 개발에 있어서 필요한 기술, 연구결과, 절차 등을 기술해 놓은 메모
- 출처 : RFC란?