앞서 1장에서 URL이 무엇인지는 살펴 보았습니다.
URL이 어떠한 형태로 되어 있는지 살펴봅시다.
http://www.joes-hardware.com/seasonal/index-fall.html
이와 같은 URL을 불러오고 싶다고 하자.
URL로 인터넷상의 모든 리소스를 찾을 수 있지만, 그 리소스들은 다른 스킴을 통해 접근할 수 있으며, URL 문법은 스킴에 따라서 달라집니다.
대부분의 URL 스킴의 문법은 일반적을 9개 부분으로 나뉩니다.
<스킴>://<사용자 이름>:<비밀번호>@<호스트>:<포트>/<경로>;<파라미터>?<질의>#<프래그먼트>
컴포넌트 | 설명 | 기본값 |
---|---|---|
스킴 | 몇몇 스킴은 리소스에 접근을 하기 위해 사용자 이름을 필요 | 없음 |
사용자 이름 | 몇몇 스킴은 리소스에 접근을 하기 위해 사용자 이름을 필요로 함. | anonymous |
비밀번호 | 사용자의 비밀번호를 가르킴. | <이메일 주소> |
호스트 | 리소스를 호스팅하는 서버의 호스트명이나 IP주소 | 없음 |
포트 | 리소스를 호스팅하는 서버가 열어놓은 포트 번호. | 스킴에 따라 다름 |
경로 | 이전 컴포넌트와 빗금(/)으로 구분되어 있으며, 서버 내 리소스가 서버 어디에 있는지를 가르킨다. | 없음 |
파라미터 | 특정 스킴들에서 입력 파라미터를 기술하는 용도로 사용 | 없음 |
질의 | 스킴에서 애플리케이션에 파라미터를 전달하는데 사용, URL의 끝에 "?"로 구분 | 없음 |
프래그먼트 | 리소스의 조각이나 일부분을 가르키는 이름, 클라이언트에서만 사용, URL의 끝에서 "#"문자로 구분 | 없음 |
프래그먼트의 경우, 일반적으로 HTTP 서버는 객체 일부가 아닌 전체만 다루기 때문에, 클라이언트는 서버에 프래그먼트를 전달하지는 않습니다.
대신, 브라우저는 서버로부터 전체 리소스를 내려받은 후, 프래그먼트를 사용하여 당신이 보고자 하는 리소스의 일부를 보여줍니다.
웹 클라이언트는 몇몇 단축 URL을 사용합니다.
URL은 두 가지로 나뉩니다.
상대 URL은 기저(base)라고 하는 URL(현재 페이지)을 이용하여 표기합니다.
예를 들어, 현재 페이지가 http://www.joes-hardware.com/tools.html
이라고 해봅시다.
여기서 http://www.joes-hardware.com/tools.html/hammers.html
로 이동하고 싶을 때 우리는 위의 기저 URL을 이용하여 ./hammers.html
만 입력해도 이동하려고 했던 URL로 이동을 할 수 있습니다. 그리고 우리는 위의 전체 URL을 절대 URL이라고 부릅니다.
상대 URL은 프래그먼트이거나 URL 일부
URL '확장' 기능은 두 가지로 나뉩니다.
예를 들어, 호스트 명 확장의 경우 'yahoo'를 입력하면, 브라우저는 호스트명에 자동으로
'www.'와 '.com'을 붙여서 'www.yahoo.com'을 만듭니다.
현재 URI는 대부분이 URL로 되어 있습니다.
하지만, URL은 완벽하지 않습니다.
URL은 주소이지 실제 이름이 아니기 때문에, 특정 시점에 어떤 것이 위치한 곳을 알려준다는 것을 뜻합니다.
그래서 만약, 리소스가 옮겨지면 URL을 더는 사용할 수 없다는 것입니다. 그리고 그 시점에 기존 URL이 가리키고 있던 객체를 찾을 방법이 없어집니다.
URN(uniform resource names)은 객체가 옮겨지더라도(웹 서버 내에서나 웹 서버 간 모두) 항상 객체를 가르킬 수 있는 이름을 제공하기 때문에, URN은 새로운 표준 작업에 착수하고 있습니다.
지속 통합 자원 지시자(Persistent uniform resource locators, PURL)을 사용하면 URL로 URN의 기능을 제공할 수 있습니다.'
하지만, 아직까지 채택되지는 않았습니다.
그 이유는 다음과 같습니다.
Reference