2.3.1. 상대 URL

URL은 상대 URL과 절대 URL 두 가지로 나뉜다.
지금까지 우리가 본 것들은 절대 URL뿐이었다.
절대 URL은 리소스에 접근하는데 필요한 모든 정보를 가지고 있다.

그와 달리 상대 URL은 모든 정보를 담고 있지는 않다.
상대 URL로 리소스에 접근하는데 필요한 모든 정보를 얻기 위해서는, 기저(base)라고 하는 다른 URL을 사용해야 한다.

상대 URL은 URL을 짧게 표기하는 방식이다.
직접 HTML을 작성해 본 경험이 있다면, 그것이 얼마나 HTML 작성을 손쉽게 해주는지 알 것이다.
다음 예시에서는 상대 URL이 포함된 HTML 문서의 예를 보여준다.

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
    <h1>Tools Page</h1>
    <h2>Hammers</h2>
    <a href="./hammers.html">hammers</a>
</body>
</html>

위 예제는 http://www.test.com/tools.html가 가리키는 리소스인 HTML 문서의 내용을 보여준다.
해당 HTML 문서에는 ./hammers.html URL을 가리키는 하이퍼링크가 있다.
이 URL은 미완성인 것처럼 보이지만, 올바른 문법의 상대 URL이다.
이는 문서의 URL을 기준으로 상대경로로 해석될 수 있다.
이 경우 www.test.com 웹 서버의 /tools.html 리소스를 기준으로 상대경로로 명시되었다.

상대 URL 문법에 따르면, HTML 작성자는 URL에 스킴과 호스트 그리고 다른 컴포넌트들을 모두 입력하지 않아도 된다.
그 정보는 컴포넌트가 포함된 리소스의 기저 URL에서 알아낼 수 있다.
다른 리소스에 대한 URL 역시 이 상대 URL로 기술할 수 있다.

위 예시의 기저 URL은 다음과 같다.

http://www.test.com/tools.html

이 URL을 기저 URL로 사용하여, 상대 URL에서는 기술하지 않은 정보를 추측할 수 있다.
필요한 리소스가 ./hammers.html이라는 것을 알지만 스킴이나 호스트는 모른다.
기저 URL을 사용하면 스킴은 http이고 호스트는 www.test.com라는 것을 추측할 수 있다.
다음 그림은 이것을 설명한다.

기저 URL:                                 상대 URL
http://www.test.com/tools.html          ./hammers.html

    http://www.test.com/hammers.html
        새로운 절대 URL

상대 URL은 프래그먼트이거나 URL 일부다.
URL을 처리하는 브라우저 같은 애플리케이션은 상대 URL과 절대 URL 간에 상호 변환을 할 수 있어야 한다.

상대 URL을 사용하면 리소스 집합(HTML 페이지 같은)을 쉽게 변경할 수 있다.
그리고 문서 집합의 위치를 변경하더라도, 새로운 기저 URL에 의해서 해석될 것이기 때문에 위치를 변경하더라도 잘 동작할 것이다.
이는 마치 다른 서버에 있는 콘텐츠를 미러링할 수 있게 허용하는 것과 유사하다.