URL (Uniform Resource Locator)
- 인터넷 리스소를 가리키는 표준이름
- 전자정보의 일부를 가리키고 그것이 어디에 있고 어떻게 접근할 수 있는지 알려줌
인터넷 상에는 수십억 개의 리소스가 존재하고, URL을 통해 접근할 수 있다. 사용자는 원하는 리소스를 얻기 위해서 적절한 프로토콜을 사용하여 메세지는 전송 URL은 통합 자원 식별자(Uniform Resource Identifier) 의 부분집합 URI는 URL과 URN으로 분류됨
-
URN : 리소스가 어디에 존재하든 상관없이 그 이름만으로 리소스를 식별
-
URL : 리소스가 어디 있는지 설명해서 리소스를 식별
-
URL은 http 프로토콜 뿐만 아니라 다른 프로토콜을 사용할 수도 있음
-
URL과 웹이 있기 전에는 다 제각각의 분류방식을 사용해 데이터를 교환
-
URL은 애플리케이션이 리소스에 접근할 수 있는 방법을 제공함
URL로 인터넷 상의 모든 리소스를 찾을 수 있지만, 리소스들은 다른 스킴을 통해 접근할 수 있음 URL 문법은 스킴에 따라 다르지만, 매우 유사한 형태를 가짐 URL 스킴의 문법
<스킴>://<사용자 이름>:<비밀번호>@<호스트>:<포트>/<경로>;<파라미터>?<질의>#<프래그먼트>
- 스킴 : 리소스를 가져오기 위해 사용할 프로토콜
- 사용자 이름 : 몇몇 스킴은 리소스에 접근하기 위해 사용자 이름을 필요로 함 (기본 값 : anonymous)
- 비밀번호 : 사용자의 비밀번호를 가리키며, 사용자 이름에 콜론으로 이어서 기술
- 호스트 : 리소스를 호스팅 하는 서버의 호스트 명이나 IP 주소
- 포트 : 리소스를 호스팅하는 서버가 열어놓은 포트번호, 많은 스킴이 기본 포트를 가지고 있어서 포트를 생략하면 기본 포트로 적용
- 경로 : 서버 내 리소스가 어디에 있는지를 의미함. 경로 컴포넌트의 문법은 서버와 스킴에 따라 다름
- 파라미터 : 특정 스킴들에서 입력파라미터를 기술하는 용도로 사용. 파라미터는 이름/값 쌍을 가짐
- 질의 : 스킴에서 애플리케이션(DB, 웹사이트, 인터넷 게이트웨이)에 파라미터를 전달하는데 쓰임
- 프래그먼트 : 리소스의 조각이나 일부분을 가리키는 이름. URL이 특정 객체를 가리킬 경우 프래그먼트 필드는 서버에 전달되지 않고, 클라이언트에서만 사용함
스킴은 주어진 리소스에 어떻게 접근하는지 알려주는 정보로 어떤 프로토콜을 사용할지를 알려준다.
http, ftp 등의 스킴이 존재하고, :
로 구분하고 대소문자를 가리지 않는다.
인터넷에 있는 리소스를 찾으려면 리소스를 호스팅하고 있는 장비와 장비에서 리소스에 접근할 수 있는 서버의 위치를 알아야 함 호스트는 리소스를 가지고 있는 장비를, 포트는 서버가 열어놓은 네트워크 포트를 가리킴 호스트는 IP주소 또는 호스트 명으로 사용함 TCP 프로토콜을 사용하는 HTTP는 기본 포트로 80을 사용함
서버가 자신이 가지고 있는 데이터에 접근을 허용하기 전에 사용자 이름과 비밀번호를 요구하는 경우가 있음
FTP 서버의 경우 아이디와 비밀번호를 요구하는 경우가 많음
* 첫 번째 예시의 경우, ftp 서버는 아이디와 비밀번호를 기본적으로 요구하기 떄문에, 기본값을 사용한다. 아이디는 `anonymous`, 비밀번호는 브라우저마다 기본 값이 다름
서버 내에서 리소스의 위치 파일 시스켐 경로와 유사한 구조를 가짐 각 경로는 자체만의 파라미터 컴포넌트를 가질 수 있음
파라미터 정확한 요청을 하기 위해 사용하며 이름/값 쌍의 리스트로 ;
문자로 구분함
- 이름이
type
값이d
인 파라미터를 전달
- hammers :
sale=false
- index.html:
graphics=true
데이터 베이스 같은 서비스들은 요청 받을 리소스 형식의 범위를 좁히기 위해서 질의문이나 질의를 받을 수 잇음
URL의 질의 컴포넌트는 게이트웨이를 가리키는 URL의 경로 컴포넌트와 함께 전달하고 있음
‘&’
로 나뉜 ‘이름=값’
쌍 형 식의 질의 문자열
#
문자에 이어서 옴
HTML
같은 리소스 형식들은 본래의 수준보다 더 작게 나뉠 수 있고, 나뉜 조각을 가리키키 위해 프래그먼트를 사용
HTTP 서버는 객체의 일부가 아닌 전체를 다루기 때문에 클라이언트에서 서버에 프래그먼트를 전달하지 않음
브라우저가 서버로부터 전체 리소스를 받은 후 프래그먼트를 사용해서 보고자 하는 리소스의 일부를 보여줄 수 있음
절대 URL : 모든 정보를 담고 있는 URL
상대 URL : 모든 정보를 담고 있지 않음, 다만 정보를 얻기 위해 기저(base)라고 하는 다른 URL을 사용
상대 URL 을 사용하면, 문서 집합의 위치를 변경하더라도 새로운 기저 URL에 의해 해석될 것이기 때문에 잘 동작함 (콘텐츠를 미러링 할 수 있게 허용하는 것과 유사함)
- 기저 URL을 찾는 방법
- 리소스에서 명시적으로 제공
- HTML 문서에서 기저 URL을 가리키는
<BASE>
태그를 기술할 수 있음
- HTML 문서에서 기저 URL을 가리키는
- 리소스를 포함하고 있는 기저 URL
- 해당 리소스의 기저 URL을 사용
- 기저 URL이 없는 경우
- 기저 URL이 없는 경우도 존재하는데, 이런 경우는 절대 URL만으로 이루어져 있다는 뜻이지만, 불완전하거나 깨진 URL 일수도 있음
- 리소스에서 명시적으로 제공
- 상대 참조 해석하기
- 상대 URL을 절대 URL로 변환하기 위해서 상대 URL과 기저 URL을 컴포넌트 조각으로 나누는 작업이 필요함
- 파싱으로 분해된 URL을 사용하여 아래 그림처럼 상대 URL을 절대 URL로 변경할 수 있음
- 호스트명 확장
- 브라우저에 yahoo 를 입력하면, 브라우저는 호스명에
www.yahoo.com
에 자동으로 붙여준다.
- 브라우저에 yahoo 를 입력하면, 브라우저는 호스명에
- 히스토리 확장
- 방문했던 URL을 브라우저가 저장해놓고 일부만 입력하면 보여준다.
US-ASCII 문자 집합을 사용 전 세계의 언어를 지원하기 위해 이스케이프 문자열을 쓸수 있게 설계되어 특정 문자나 데이터를 인코딩할 수 있음
안전한 문자 집합을 이용하는 경우 그 표현의 한계를 넘기 위한 인코딩 방식이 고안됨
%
로 시작해 아스키 코드로 표현되는 두개의 숫자로 이루어진 이스케이프 문자로 바꾸어 인코딩함
2.4.3 문자 제한
몇몇 문자는 URL 내에서 특별한 의미로 예약되어 있음
이 문자들을 사용하면 게이트웨이와 프로토콜에서 혼동이 발생하기 때문에 사용을 금지함