본문 바로가기

WebServer

HTTP 완벽 가이드 1일차

미디어 타입


 인터넷은 수천 가지 데이터 타입을 다루기 때문에 웹에서 전송되는 객체에는 각각 MIME 타입이라는 데이터 포맷 라벨을 붙인다. MIME(Multipurpose Internet Mail Extenstions)은 원래 각각 다른 전자메일 시스템 사이에서 메시지가 오갈 때 겪는 문제점을 해결하기 위해 설계되었다. 워낙 잘 동작했기 때문에, HTTP에서도 콘텐츠를 기술하고 라벨을 붙이기 위해 채택되었다.

 웹 서버는 모든 객체에 MIME 타입을 붙인다. 웹브라우저는 MIME 타입을 통해 다룰 수 있는 타입인지 확인한다. 이미지, 오디오, HTML 등 대부분 수백 가지를 다룰 수 있다. 


MIME 타입은 사선(/)으로 구분된 주 타입(primary object type)과 부 타입(specific subtype)으로 이루어진 문자열 라벨이다. 예를 들어

  • HTML로 작성된 문서는 text/html 라벨이 붙는다.
  • plain ASCII 텍스트 문서는 text/plain 라벨이 붙는다.
  • JPEG 이미지는 image/jpeg가 붙는다.
  • GIF 이미지는 image/gif가 붙는다.
  • 애플 퀵타인 동영상은 video/quicktime이 붙는다.
  • 마이크로소프트 파워포인트 프레젠테이션은 applicationn/vnd.ms-powerpoint가 붙는다.

참고: 엄청나게 많다.

http://www.sitepoint.com/web-foundations/mime-types-complete-list/

http://www.freeformatter.com/mime-types-list.html

http://www.iana.org/assignments/media-types/media-types.xhtml



URI


 웹 서버 리소스 이름은 통합 자원 식별자(URI : uniform resource identifier)로 불리운다. URI는 인터넷의 우편물 주소 같은 것으로 리소스를 고유하게 식별하고 위치를 지정할 수 있다. URI에는 두 동류의 자원 식별지가 있다.


URL : 통합 자원 지시자(uniform resource locator)는 가장 흔한 형태이다. 소스의 위치과 접근 방법에 대해 분명히 알려준다. 프로토콜, 서버, 리소스 3가지 정보를 가진다. 대부분의 URI는 URL이므로 통상적인 관례에 따라 URI와 URL을 같은 의미로 사용한다.


URN: URN(uniform resource name)은 콘텐츠를 이루는 한 리소스에 대해 리소스 위치에 영향 받지 않고 접근할 수 있는 유일한 경로가 된다. 리로스 경로를 바꾸더라도 리소스 이름이 바뀌지 않는 한 문제없이 동작한다. 하지만 계속 실험중인 상태고 널리 채택되지 않았다.



트랜잭션


HTTP 트랜잭션은 요청명령과 응답 결과로 구성되어 있다. 


메서드 : HTTP는 HTTP 메서드라고 불리는 여러가지 종류의 요청 명렬을 지원한다. 모든 HTTP 요청 메시지는 한개의 메서드를 갖는다. 흔히 GET, PUT, DELETE, POST, HEAD 메서드가 사용된다.


상테 코드 : 모든 HTTP 응답 메시지는 상태 코드와 함께 반환된다. 상태 코드는 요청이 성공했는지 추가 조치가 필요한지 알려주는 세자리 숫자이다. 200(바르게 반환), 302(다시 보내라, 다른 곳에 가서 리소스를 가져가라), 404(없음, 리소스를 찾을 수 없음) 코드가 흔히 쓰인다.


웹페이지는 여러 객체로 이루어질 수 있다 : 웹브라우저는 하나의 페이지를 표현하기 위해 뼈대가되는 HTML 문서를 가져오고 첨부된 이미지, 그래픽 조각, 애플릿 등을 가져오기 위해 추가로 트랜잭션을 수행한다. 이런 웹페이지는 하나의 리소스가 아닌 리소스 모음이다.



메시지


메시지는 텍스트로 이루어져 있어 사람이 인식하기 쉽다. HTTP는 요청 메시지와 응답 메시지 구조로 되어 있다. 클라이언트에서 서버로 보내는 메시지가 요청 메시지이고 서버에서 클라이언트로 보내는 메시지가 응답 메시지이다. 메시지는 다음과 같은 구조로 되어 있다.


시작줄 : 첫줄은 시작줄로 요청이면 무엇을 해야하는지, 응답이면 무슨 일이 일어났는지를 나타낸다.


헤더 : 0개 이상의 헤더 필드로 구성되며 마지막은 빈줄로 들어간다. 쌍점(:)으로 구문분석을 하고 하나의 이름과 하나의 값으로 이루어진다.


본문 : 요청은 본문에 데이터를 실어서 보내며, 응답은 데이터를 본문에 실어서 반환한다. 본문에는 이진 데이터를 포함해서 보낼 수 있다.



TCP 커넥션


HTTP는 애플리케이션 계층의 프로토콜이다. HTTP는 네트워크 세부 사항에는 신경쓰지 않고 대중적이고 신뢰성이 있는 TCP/IP 프로토콜을 이용한다. TCP의 특징은 다음과 같다.

  • 오류없는 데이터 전송
  • 순서에 맞는 전달(전송한 데이터 조각은 언제나 전송한 순서에 맞게 도착한다.)
  • 조각나지 않는 데이터스트림(언제든 어떤 크기로든 보낼 수 있다)


 HTTP( 애플리케이션 계층 )

 TCP( 전송 계층 )

 IP( 네트워크 계층 )

 네트워크를 위한 링크 인터페이스( 데이터 링크 계층 )

 물리적인 네트워크 하드웨어( 물리 계층 )

                     HTTP 프로토콜 스택



접속


TCP 커넥션을 IP주소와 포트번호가 있어야한다. 예를 들어 www.naver.com 을 웹브라우저 주소창에 입력하면 도메인 이름 서비스(DNS: Domain Name Service)를 통해 쉽게 IP주소를 알 수 있다. 그리고 포트번호가 있어야하는데 생략된 경우에는 기본 포트 80으로 접근한다. 포트를 정의한다면 www.naver.com:80이 되겠다.


Telnet을 이용하여 접속할 수 있다. Telnet도 문자기반이기 때문에 Telnet을 이용하면 직접적으로 문자를 입력하여 메시지를 전달할 수 있으나 번거롭기 때문에 생략한다.



웹의 구성요소


프락시 : 클라이언트와 서버 사이에 위치한 중개자. 클라이언트의 모든 요청은 프락시를 통해 이루어지며, 프락시는 특정한 내용을 필터링하여 보안을 강화시키는 용도로 사용되는 경우가 많다. 바이러스 검출, 성인 컨텐츠 차단등 역할이 대표적이다.


캐시 : 많이 찾는 웹페이지를 클라이언트 가까이 보관하는 HTTP 창고. 웹 캐시와 캐시 프락시는 자신을 거쳐가는 자주 찾는 문서를 저장해둔다. 서버보다 캐시가 가깝기 때문에 접근 속도가 향상된다.


게이트웨이 : 다른 애플리케이션과 연결된 특별한 웹 서버. HTTP 요청을 받게 되면 게이트웨이가 다른 서버로 부터 데이터를 가져와 클라이언트에 보내준다. 클라이언트는 게이트웨이와 통신하는지 알 수 없다. 트래픽을 분산시키기 위해 사용된다.


터널 : 단순히 HTTP 통신을 전달하기만 하는 특별한 프락시. 터널은 두 커넥션 사이에서 raw 데이터를 열어보지 않고 그대로 전달하는 HTTP 애플리케이션이다. 대표적인 예로, SSL 트래픽을 HTTP 커넥션으로 전송함으로써 웹 트래픽만 허용하는 사내 방화벽을 통과시키는 



에이전트


에이전트는 사용자를 위해 HTTP 요청을 만들어주는 클라이언트 프로그램이다. 웹 요청을 만드는 애플리케이션은 뭐든 HTTP 에이전트다. 사람의 통제 없이 스스로 웹을 돌아다니며 HTTP 트랜잭션을 일으키고 컨텐츠를 받아오는 자동화된 사용자 에이전트가 있다. 보통 스파이더 나 웹로봇과 같이 다채로운 이름을 갖고 검색엔진 데이터베이스나 가격비교같은 유용한 웹 컨텐츠 보관소를 만든다.


HTTP 프로토콜에 대한 정보

http://www.w3.org/Protocols/