HTTP 개관
- 웹 브라우저와 웹 서버가 기본적인 트랜잭션(요청 명령과 응답 결과)을 구현하기 위해 어떻게 메세지를 주고 받는지 알아본다.
학습목표
- 얼마나 많은 클라이언트가 서버와 통신하는지
- 리소스가 어디서 오는지
- 웹 트랜잭션이 어떻게 동작하는지
- HTTP 통신을 위해 사용하는 메세지의 형식
- HTTP 기저의 TCP 네트워크 전송
- 여러 종류의 HTTP 프로토콜
- 인터넷 곳곳에 설치된 다양한 HTTP 구성요소
리소스
- 웹 리소스 : 웹에 콘텐츠를 제공하는 모든 것
- 정적 파일
- 동적 파일 : 요청에 따라 콘텐츠를 생산하는 프로그램 통해 생산
미디어 타입(MIME 타입)
웹서버는 모든 HTTP객체 데이터에 MIME 타입을 붙인다.
웹브라우저는 서버에서 객체를 받을 때 다룰 수 있는 객체인지 MIME 타입을 통해 확인
구성 : 주 타입/부 타입
MIME type 설명 text/html html로 된 텍스트 문서 text/plain plain ASCII 텍스트 문서 image/jpeg JPEG 이미지 imge/gif GIF 이미지 video/quicktime 애플 퀵타임 동영상 application/vnd.ms-powerpoint 파워포인트 프레젠테이션
URI
- 서버 리소스 이름
- 통합 자원 식별자(uniform resource identifier)
- 웹서버 리소스는 각자 이름을 갖고 있고, 클라이언트는 리소스를 지목할 수 있다.
- HTTP는 주어진 URI로 객체를 찾아온다.
http://www.joes-hardware.com/specials/saw-blade.gif
* 프로토콜-서버-리소스
- URI(자원 식별자)에는 URL과 URN이 있다.
URL
- 통합 자원 지시자(uniform resource locator)
- 리소스 식별자의 가장 흔한 형태
- 특정 서버의 한 리소스에 대한 구체적인 위치 서술
- 리소스에 대한 주소
- 오늘날 대부분의 URI는 URL이다.
- URL은 리소스가 어디에 있고, 어떻게 접근할 수 있는지 분명히 알려준다.
http://www.oreilly.com/index.html
ftp://joe:tools4u@ftp.joes-hardware.com/locking-pliers.gif
스킴(어떻게)-서버의 인터넷주소(어디에)-웹서버 리소스(무엇을)
- 스킴(리소스에 접근하기 위해 사용하는 프로토콜)
URN
- uniform resource name
- 리소스의 위치에 영향 받지 않은 유일무이한 이름 역할
- 리소스를 옮기더라도 문제 없이 동작
- 여러 종류의 네트워크 접속 프로토콜로 접근해도 문제 없다.
- 리소스 위치 분석을 위한 인프라 지원이 필요
트랜잭션
- HTTP 트랜잭션은 요청 명령과 응답 결과로 구성되어 있다.
메서드
- 여러 종류의 요청 명령을 지원
HTTP메서드 | 설명 |
---|---|
GET | 지정한 리소스를 보내라 |
POST | 클라이언트 데이터를 서버 게이트웨이 애플리케이션으로 보내라 |
PUT | 서버로 보낸 데이터를 지정한 이름의 리소스로 저장하라 |
PATCH | |
DELETE | 서버 리소스를 삭제하라 |
HEAD | 지정한 리소스에 대한 응답에서 HTTP 헤더 부분만 보내라 |
상태코드
- HTTP 응답 메세지는 상태 코드와 함께 반환된다
HTTP 상태코드 | 설명 |
---|---|
200 | 문서가 바르게 반환되었다 |
302 | 다시 보내라. 다른 고셍 가서 리소스를 가져가라 |
404 | 리소스를 찾을 수 없다 |
웹페이지는 여러 객체로 이루어질 수 있다.
- 웹페이지는 보통 리소스의 모음이다.
- 예시) 시각적으로 풍부한 웹페이지를 가져올 때 대량의 HTTP 트랜잭션을 수행한다.
- 레이아웃 서술 : HTML 뼈대
- 첨부된 이미지
- 그래픽 조각
- 자바 애플릿
- 추가로 HTTP 트랜잭션들을 수행한다.
메세지
- HTTP 메세지는 단순한 줄 단위의 문자열이다.
- 요청 메세지 : 웹 클라이언트에서 웹 서버로 보낸 HTTP 메세지
- 응답 메세지 : 서버에서 클라이언트로 가는 메세지
아래 3부분으로 이뤄진다
- 시작줄
- 요청은 무엇을 해야하는지
- 응답은 무슨 일이 일어났는지 나타냄
- 헤더
- 헤더 필드가 0개 이상 이어진다.
- : 로 구분되고, 이름과 값으로 구성된다.
- 헤더는 빈 줄로 끝난다.
- 본문
- 어떤 종류의 데이터든 들어갈 수 있다.
- 본문은 텍스트 뿐아니라 임의의 이진 데이터를 포함할 수 있다.
TCP커넥션
- 어떻게 메세지가 TCP커넥션을 통해 한 곳에서 다른 곳으로 옮겨가는지 확인해보자.
TCP/IP
- HTTP
- 애플리케이션 계층 프로토콜
- HTTP는 신뢰성 있는 TCP/IP 프로토콜에게 네트워크 통신을 맡긴다.
- TCP/IP는 TCP와 IP가 층을 이루는 패킷 교환 네트워크 프로토콜의 집합이다.
- TCP 커넥션이 맺어지면, 메세지가 없어지건, 손상되건, 순서가 뒤바뀌어 수신되는 일은 없다.
- TCP가 제공하는 것
- 오류 없는 데이터 전송
- 순서에 맞는 전달 (데이터는 언제나 보낸 순서대로 도착한다)
- 조각나지 않는 데이터 스트림(언제든 어떤 크기로든 보낼 수 있다)
접속
- 메세지 전송을 위해서는 클라이언트와 서버 사이에 TCP/IP 커넥션을 맺어야 한다.
- TCP에서는 서버 컴퓨터에 대한 IP 주소와 그 서버에서 실행 중인 프로그램이 사용 중인 PORT 번호가 필요하다.
- IP와 PORT는 URL을 통해 알아낸다.
- URL은 리소스에 대한 주소이다.
- URL은 리소스를 가지고 있는 장비에 대한 IP주소를 알려줄 수 있다.
- 웹 브라우저가 HTTP를 이용해 서버의 HTML 리소스를 사용자에게 보여주는 순서
- 웹브라우저는 서버의 URL에서 호스트 명을 추출한다.
- 웹브라우저는 서버의 호스트 명을 IP로 변환한다. (DNS를 통해)
- 웹브라우저는 URL에서 포트번호를 추출한다.(포트 없는 경우 80)
- 웹브라우저는 웹 서버와 TCP 커넥션을 맺는다.(TCP/IP프로토콜에게 네트워크 통신을 맡긴다)
- 웹브라우저는 서버에 HTTP 요청을 보낸다.
- 서버는 웹브라우저에 HTTP 응답을 돌려준다.
(클라이언트는 서버에서 HTTP 응답을 읽는다.) - 커넥션이 닫히면, 웹브라우저는 문서를 보여준다.
댓글