URL(Uniform Resource Locator)은 인터넷의 리소스를 가리키는 표준 이름이다. 전자 정보 일부를 가리키고 그것이 어딨는지, 어떻게 접근할 수 있는지 알려준다.
URL은 URI라고 불리는 더 일반화 된 부류의 부분 집합이다. URI는 URL과 URN으로 구성된 종합적인 개념이며, URN은 현재 그 리소스가 어딨는지 상관 없이 그 이름만으로 리소스를 식별하지만 URL은 리소스가 어딨는지 설명하면서 리소스를 식별한다.
HTTP명세에서는 URI를 더 일반화 된 개념의 리소스 식별자로 사용하지만, 실제 HTTP 애플리케이션은 URL을 URI의 한 부분으로 취급한다.
또한 URL은 HTTP 프로토콜이 아닌 다른 가용한 프로토콜을 사용할 수도 있다.
URL은 브라우저에게 정보를 찾는데 필요한 모든 것을 제공하며, 원하는 리소스가 어디에 위치하고, 어떻게 가져오는지 정의한다.
URL은 모든 리소스를 찾을 수 있지만, 그 리소스들은 각각 다른 스킴을 통해 접근할 수 있으며, URL문법은 스킴에 따라 달라진다.
URL의 기본 형태는 다음과 같이 9개 부분으로 나뉜다.
<scheme>://<user>:<pwd>@<host>:<port>/<route>;<param>?<query>#<fragment>
웹 클라이언트는 몇몇 단축 URL을 인식하고 사용한다.
URL은 상대 URL와 절대 URL두가지로 나뉜다.
절대 URL은 리소스에 접근하는 데 필요한 모든 정보를 갖고 있다.
반대로 상대 URL은 모든 정로를 담고 있지 않기 때문에 base URL이라고 하는 다른 URL을 통해서 필요한 정보를 얻어야한다.
상대 URL 문법에 따르면, HTML작성자는 URL에 스킴과 호스트 그리고 다름 컴포넌트 들을 모두 입력하지 않아도 된다. 해당 정보는 컴포넌트가 포함된 리소스의 base URL에서 알아 낼 수 있다.
어떤 브라우저는 URL을 입력한 도중이나 입력한 이후 자동으로 URL을 확장한다.
호스트명 확장
호스트 명 확장을 지원한다면 단순한 휴리스틱만을 사용해서 입력한 호스트 명을 전체 호스트 명으로 확장할 수 있다.
예를 들어 ‘naver’를 입력하면, 브라우저는 ‘www.’과 ‘.com’을 붙여서 ‘www.naver.com’을 만든다.
호스트명 확장 기능은 사용자의 시간을 절약하고 혼란을 막을 수 있지만, 프록시와 같은 다른 HTTP애플리케이션에 문제가 생길 수 도 있다.
히스토리 확장
사용자가 방문했던 URL을 브라우저가 저장해 놓는 것이다.URL을 입력하면 그 입력된 URL의 앞 글자를 포함하는 완성된 형태의 URL을 사용자가 선택 할 수 있도록 한다.
URL은 호환성을 고려하여 설계되었으며, 인터넷에 있는 모든 리소스가 여러 프로토콜을 통해 전달되 수 있고, 각 리소스는 유일한 이름을 갖을 수 있도록 설계되었다.
또한 모든 프로토콜이 데이터를 전송하기 위해 서로 다른 장치를 갖고 있기 때문에 어떤 인터넷 프로토콜을 통해서든 안전하게 전송될 수 있도록 설계되었다.
여기서 안전한 전송이란, 정보가 유실될 위험이 없다는 뜻이다. SMTP 프로토콜 같은 경우 7비트 인코딩을 사용하기 때문에 특정 문자는 제거 될 수도 있는 전송방식을 사용하는 데, URL은 해당 이슈를 피하기 위해서 상대적으로 작고 안전한 알파뱃 문자만 포함한다.
하지만 점차 URL에 이진 데이터나 안전하지 않은 알파벳 이외의 문자를 포함하려는 시도가 생기자 escape 라는 기능을 추가하여 안전하지 않은 문자를 안전한 문자로 인코딩 할 수 있게 되었다.
안전하지 않은 문자는 퍼센티지 기호(%)로 시작해서, ASCII 코드로 표현되는 두 개의 16진수 숫자로 이루어진 이스케이프 문자로 바뀐다.
몇몇 문자는 URL내에서 특별한 의미로 예약되어 있는데, 아래의 문자들은 사용하기위해서는 인코딩 되어야 한다.
% / . .. # ? ; : $ , + @ & = {} | \ ~ [] <> “ 0x00-0x1F 0x7F