URL과 리소스가 어떻게 쓰이는지 더 자세히 알아보자.
인터넷의 리소스 탐색하기

- 스킴은 웹 클라가 리소스에 어떻게 접근하는지 알려줌.
- 호스트는 서버의 위치임. 리소스가 어디에 호스팅 되어 있는지를 알려줌.
- 리소스의 경로는 서버에 존재하는 로컬 리소스 중 요청받은 리소스가 무엇인지 알려줌.
- http 프로토콜이 아닌 다른 프로토콜도 있음.
- ex) 이메일 주소, ftp, 스트리밍을 제공하기 위해 비디오 서버에 호스팅하고 있는 영화.
- URL은
스킴://서버위치/경로
구조로 동일하게 이루어져 있어 모든 사람이 같은 방식으로 리소스를 찾을 수 있도록 단일 방식의 작명 규칙을 가짐.
URL이 있기 전, 어플리케이션마다 달리 갖고 있는 분류 방식을 사용했기에 엄청나게 복잡한 방법이 산재해 있었다.
URL 문법

- 스킴
- URL을 해석하는 애플리케이션이 어떤 프로토콜을 사용하여 리소스를 요청해야 하는지 알려줌.
:
로 구별하고 대소문자를 가리지 않으므로 http://와 HTTP://는 같음.
- 호스트와 포트
- 애플리케이션이 인터넷에 있는 리소스를 찾으려면, 리소스를 호스팅하고 있는 장비와
- 그 장비 내에서 리소스에 접근할 수 있는 서버가 어디에 있는지 알아야 함.
- 사용자 이름과 번호
- 보통 스킴과 호스트 사이에 위치함.
- 애플리케이션이 FTP와 같이 사용자 이름과 비밀번호를 요구하는 URL 스킴을 사용할 때 씀.
- 만약 값이 없다면 브라우저에서 기본으로 정의하고 있는 기본 값을 넣음. ex)
anonymous
,chrome@example.com
@
문자로 URL과 사용자 이름과,비밀번호를 분리함. ex)ftp://anonymous:my_password@...
- 경로
- 서버가 리소스의 위치를 찾는데 사용하는 정보.
- 파일 시스템과 유사한 구조.
/
로 경로를 구분함.
- 파라미터
- 스킴이 객체에 대한 호스트 및 경로 정보만으로는 리소스를 찾지 못함.
- URL 파라미터는 애플리케이션이 서버에 정확한 요청을 하기 위해 필요한 입력 파라미터를 받는데 사용함.
;
로 URL과 구분하며 key, value 값으로 이루어짐. ex)http://...gnu;type=d
- 질의 문자열
- 데이터베이스 같은 서비스들은 요청받을 리소스 형식의 범위를 좁히기 위해 질문을 받음.
?
로 URL과 구분하여 key, value 형식임.- 질의 컴포넌트 간의 구별은
&
로 함. - ex)
http://.../inventory-check.cgi?item=12731&color=blue
- 프래그먼트
- 리소스의 특정 부분을 가르킬 수 있도록 프래그먼트 컴포넌트를 제공함.
- HTML 문서에 있는 특정 이미지나 일부분을 가르킬 수 있음.
#
으로 URL과 구분.- 참고로 서버는 객체 일부가 아닌 전체만을 다루기 때문에 클라는 서버에 프래그먼트만 전송하지 않음. 브라우저가 서버로부터 전체 리소스를 내려받은 후, 프래그먼트를 사용하여 보고자 하는 리소스의 일부를 보여줌.
단축 URL
- base URL과 상대 URL 그리고 절대 URL
- URL은 상대 URL과 절대 URL로 나뉨. 흔히 아는 URL은 리소스에 접근하는데 필요한 모든 정보를 지닌 절대 URL임.
- 상대 URL은 URL을 짧게 표기하는 방식임.
<a href="./hammers.html">gogo</a>
- 리소스 또는 base URL에서 명시적으로 제공하거나
- 상대 참조를 해석하는 것이 있음.

- URL 자동 확장
- 사용자가 빠르게 URL을 입력하도록 도와주는 방법.
- 호스트명 자동 확장 ex) naver를 치면 자동으로 www와 .com을 붙여줌.
- 히스토리 자동 확장. 과거에 사용자가 방문했던 URL 기록을 저장하고 추후 검색시 보여줌.
안전하지 않은 문자
- url은 상대적으로 작고 일반적으로 안전한 알파벳 문자만 포함하도록 허락한다.
- 하지만, 안전한 알파벳 외의 문자도 포함하려 할 때가 있어 이스케이프라는 기능을 추가하였다.
- 이스케이프는 안전하지 않은 문자를 안전한 문자로 인코딩 할 수 있게 하였다.
- URL의 문자 집합
- 역사적으로 많은 컴퓨터 애플리케이션이 US-ASCII 를 사용해왔음.
- 시간이 지나고 전세계 사람들이 사용하게 되었고, 모든 문자들을 US-ASCII가 지원하지 않는 문제점이 생김.
- 이스케이프 문자열 : US-ASCII에서 사용이 금지된 문자들로, 특정 문자나 데이터를 인코딩 할 수 있게 함.
- 인코딩 체계

- 인코딩 : 안전하지 않은 문자를 이스케이프 문자로 바꿈.
- 이스케이프 문자 :
%
기호로 시작해 ASCII 코드로 표현되는 두 개의 16진수 숫자로 이루어짐.
- 문자 제한
- 몇몇 문자는 URL 내에서 특별한 의미로 예약 됨.
- URL에서 예약된 문자들을 다른 용도로 사용하려면 그 전에 반드시 인코딩 해야함.

미래
- URL은 세상에 존재하는 모든 객체에 이름을 지을 수 있고, 새로운 포맷을 쉽게 추가할 수 있게 설계됨.
- 하지만 URL은 주소이지 실제 이름이 아니기 때문에 리소스가 옮겨지면 URL을 더는 사용할 수 없음.
- 이 문제를 개선하기 위해 URN이 도입됨.
- PURL(Persistent Uniform Resource Locator)을 사용하면 URL로 URN의 기능을 제공할 수 있음.
- 하지만 표준을 제정하는 것에서부터 여러 HTTP 애플리케이션을 수정하기 위한 벤더들과의 합의도 필요하기 때문에 URL은 당분간 계속 사용될 것임.