본문으로 건너뛰기

2장 URL과 리소스

URL은 인터넷의 리소스를 가리키는 표준 이름이다.

2.1 인터넷의 리소스 탐색하기​

URL은 브라우저가 정보를 찾는데 필요한 리소스의 위치를 가리키며 URL을 이용해 사람과 애플리케이션이 인터넷상의 수십억 개의 리소스를 찾고 사용하며 공유할 수 있다. URL을 통해 사람이 HTTP 및 다른 프로토콜을 통해 접근할 수 있다. 사용자는 브라우저에 URL을 입력하고 브라우저는 화면 뒤에서 사용자가 원하는 리소스를 얻기 위해서 적절한 프로토콜을 사용하여 메시지를 전송한다.

URL은 URI라고 불리는 더 일반화된 부류의 부분 집합이다. URI는 두 가지 주요 부분 집합인 URL과 URN으로 구성된 종합적인 개념이다. URN은 현재 그 리소스가 어디에 존재하든 상관없이 그 이름만으로 리소스를 식별하는데 비해 URL은 리소스가 어디 있는지 설명해서 리소스를 식별한다.

HTTP 명세에서는 URI를 더 일반화된 개념의 리소스 식별자로 사용한다. 하지만 실제 HTTP 애플리케이션은 URL을 URI의 한 부분으로 취급한다.

resource

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)를 : 문자로 분리하여 모두 기술했다.

2.2.4 경로​

2.2.5 파라미터​

2.2.6 질의 문자열​

2.2.7 프래그먼트​

2.3 단축 URL​

2.3.1 상대 URL​

2.3.2 URL 확장​

2.4 안전하지 않은 문자​

2.4.1 URL 문자 집합​

2.4.2 인코딩 체계​

2.4.3 문자 제한​

2.4.4 좀 더 알아보기​

2.5 스킴의 바다​

2.6 미래​

2.6.1 지금이 아니면, 언제?​

2.7 추가 정보​