2장 URL과 리소스
URL은 인터넷의 리소스를 가리키는 표준 이름이다.
2.1 인터넷의 리소스 탐색하기
URL은 브라우저가 정보를 찾는데 필요한 리소스의 위치를 가리키며 URL을 이용해 사람과 애플리케이션이 인터넷상의 수십억 개의 리소스를 찾고 사용하며 공유할 수 있다. URL을 통해 사람이 HTTP 및 다른 프로토콜을 통해 접근할 수 있다. 사용자는 브라우저에 URL을 입력하고 브라우저는 화면 뒤에서 사용자가 원하는 리소스를 얻기 위해서 적절한 프로토콜을 사용하여 메시지를 전송한다.
URL은 URI라고 불리는 더 일반화된 부류의 부분 집합이다. URI는 두 가지 주요 부분 집합인 URL과 URN으로 구성된 종합적인 개념이다. URN은 현재 그 리소스가 어디에 존재하든 상관없이 그 이름만으로 리소스를 식별하는데 비해 URL은 리소스가 어디 있는지 설명해서 리소스를 식별한다.
HTTP 명세에서는 URI를 더 일반화된 개념의 리소 스 식별자로 사용한다. 하지만 실제 HTTP 애플리케이션은 URL을 URI의 한 부분으로 취급한다.
http://www.joes-hardware.com/seasonal/index-fall.html
첫 번째 부분: http
- URL의 스킴이다.
- 스킴은 웹 클라이언트가 리소스에 어떻게 접근하는지 알려준다.
- 이 경우 HTTP 프로토콜을 사용한다.
두 번째 부분: www.joes-hardware.com
- 서버의 위치이다.
- 웹 클라이언트가 리소스가 어디에 호스팅 되어있는지 알려준다.
세 번째 부분: /seasonal/index-fall.html
- 리소스의 경로이다.
- 경로는 서버에 존재하는 로컬 리소스 중에서 요청받은 리소스가 무엇인지 알려준다.
URL은 HTTP 프로토콜이 아닌 다른 프로토콜도 사용할 수 있다.
- 이메일 주소:
mailto:president@whitehouse.gov
- FTP 서버의 파일:
ftp://ftp.lots-o-book.com/pub/complete-price-list.xls
- 스트리밍을 제공하기 위해 비디오 서버에 호스팅하고 있는 영화:
rtsp://www.joes-hardware.com:554/interview/cto_video
2.1.1 URL이 있기 전 암흑의 시대
웹과 URL이 있기 전에 사람들은 네트워크상에 산재해 있는 데이터에 접근하기 위해서 애플리케이션마다 다르게 가지고 있 는 분류 방식을 사용했다.
URL을 사용하면 애플리케이션에서 하나의 인터페이스를 통해 일관된 방식으로 많은 리소스에 접근할 수 있다.
URL은 브라우저가 더 영리하게 리소스에 접근하고 그것을 다루게 함으로써 온라인 세상을 단순화시킨다.
URL은 브라우저에게 정보를 찾는데 필요한 모든 것을 제공하며 원하는 리소스가 어디에 위치하고 어떻게 가져오는지 정의한다.
2.2 URL 문법
URL로 인터넷상의 모든 리소스를 찾을 수 있지만 그 리소스는 다른 스킴을 통해 접근할 수 있으며 URL 문법은 스킴에 따라서 달라진다.
대부분의 URL 스킴 문법은 일반적으로 9개 부분으로 나뉜다.
<스킴>://<사용자 이름>:<비밀번호>@<호스트>:<포트>/<경로>;<파라미터>?<질의>#<프래그먼트>
모든 컴포넌트를 가지는 URL은 거의 없고 가장 중요한 세 가지 컴포넌트는 스킴, 호스트, 경로이다.
컴포넌트 | 설명 | 기본값 |
---|---|---|
스킴 | 리소스를 가져오려면 어떤 프로토콜을 사용하여 서버에 접근해야 하는지 가리킨다. | 없음 |
사용자 이름 | 몇몇 스킴은 리소스에 접근하기 위해 사용자 이름이 필요하다. | anonymous |
비밀번호 | 사용자의 비밀번호를 가리키며 사용자 이름에 콜론(:)으로 이어서 기술한다. | <이메일 주소> |
호스트 | 리소스를 호스팅하는 서버의 호스트 명이나 IP 주소이다. | 없음 |
포트 | 리소스를 호스팅하는 서버가 열어놓은 포트 번호이다. 많은 스킴이 기본 포트를 가지고 있다. | 스킴에 따라 다름 |
경로 | 이전 컴포넌트와 빗금(/)으로 구분되어 있으며 서버 내 리소스가 서버 어디에 있는지를 가리킨다. 경로 컴포넌트의 문법은 서버와 스킴에 따라 다르다. | 없음 |
파라미터 | 특정 스킴에서 입력 파라미터를 기술하는 용도로 사용한다. 파라미터는 이름/값을 쌍으로 가진다. 파라미터는 다른 파라미터나 경로의 일부와 세미콜론(;)으로 구분하여 기술하며 여러 개를 가질 수 있다. | 없음 |
질의 | 스킴에서 애플리케이션에 파라미터를 전달할 때 사용한다. 질의 컴포넌트를 작성하는데 쓰이는 공통 포맷은 없다. URL의 끝에서 "?" 문자로 구분한다. | 없음 |
프래그먼트 | 리소스의 조각이나 일부분을 가리키는 이름이다. URL이 특정 객체를 가리킬 경우에 프래그먼트 필드는 서버에 전달하지 않는다. 클라이언트에서만 사용한다. URL의 끝에서 "#" 문자로 구분한다. | 없음 |
2.2.1 스킴: 사용할 프로토콜
스킴은 주어진 리소스에 어떻게 접근하는지 알려주는 중요한 정보다. URL을 해석하는 애플리케이션이 어떤 프로토콜을 사용하여 리소스를 요청해야 하는지 알려준다.
스킴 컴포넌트는 알파벳으로 시작하고 URL의 나머지 부분과 첫 번째 ':' 문자로 구분한다. 스킴의 이름은 대소문자를 가리지 않으므로 'http'와 'HTTP'는 같다.
2.2.2 호스트와 포트
애플리케이션이 인터넷에 있는 리소스를 찾으려면 리소스를 호스팅하고 있는 장비와 그 장비 내에서 리소스에 접근할 수 있는 서버가 어디에 있는지 알아야 한다.
URL의 호스트와 포트 컴포넌트는 그 두 가지 정보를 제공한다.
- 호스트 컴포넌트: 접근하려고 하는 리소스를 가지고 있는 인터넷상의 호스트 장비를 가리킴
- 포트 컴포넌트: 서버가 열어놓은 네트워크 포트를 가리킴
2.2.3 사용 자 이름과 비밀번호
ftp://ftp.prep.ai.mit.edu/pub/gnu
ftp://anonymous@ftp.prep.ai.mit.edu/pub/gnu
ftp://anonymous:my_passwd@ftp.prep.ai.mit.edu/pub/gnu
http://joe:joespasswd@www.joes-hardware.com/sales_info.txt
- 첫 번째 예: 사용자 이름이나 비밀번호 컴포넌트 없이 표준 스킴, 호스트, 경로만 있다. 애플리케이션이 FTP와 같이 사용자 이름과 비밀번호를 요구하는 URL 스킴을 사용하는데 그 값이 삽입되어 있지 않을 경우 기본 사용자 이름과 비밀 번호 값을 넣는다. 기본 사용자 이름값으로
anonymous
를, 비밀번호는 브라우저마다 가지고 있는 기본값을 사용한다. (IE는IEUser
를, 크롬은chrome@example.com
을 넣는다.) - 두 번째 예: 사용자 이름이
anonymous
로 되어 있다. 호스트 컴포넌트와 나란히 기술되어 있는 사용자 이름은 단순한 이메일 주소처럼 보이기도 한다.@
문자는 URL로부터 사용자 이름과 비밀번호 컴포넌트를 분리한다. - 세 번째 예: 사용자 이름
anonymous
과 비밀번호(my_passwd
)를:
문자로 분리하여 모두 기술했다.