좌충우돌 개발

HTTP 완벽가이드 - URL과 리소스

|

2장 URL과 리소스

2.1 인터넷의 리소스 탐색하기

URL의 구조 : ‘스킴://서버의위치/경로’

2.2 URL 문법

URL 스킴의 문법
<스킴>://<사용자 이름>:<비밀번호>@<호스트>:<포트>/<경로>;<파라미터>?<질의>#<프래그먼트>

컴포넌트 설명 기본값
스킴 리소스를 가져오려면 어떤 프로토콜을 사용하여 서버에 접근해야 하는지 가리킨다 없음
사용자 이름 몇몇 스킴은 리소스에 접근을 하기 위해 사용자 이름을 필요로 한다. anonymous
비밀번호 사용자의 비밀번호를 가리키며, 사용자 이름에 콜론(:)으로 이어서 기술 한다. 이메일 주소
호스트 리소스를 호스팅하는 서버의 호스트 명이나 IP 주소 없음
포트 리소스를 호스팅하는 서버가 열어 놓은 포트번호. 많은 스킴은 기본 포트를 가지고 있다 ( HTTP의 기본 포트는 80) 스킴에 따라 다름
경로 이전 컴포넌트와 빗금(/)으로 구분되어 있으며, 서버 내 리소스가 서버 어디에 있는지를 가리킨다. 경로 컴포넌트의 문법은 서버와 스킴에 따라 다르다. 없음
파라미터 특정 스킴들에서 입력 파라미터를 기술하는 용도로 사용한다. 파라미터는 이름/값을 쌍으로 가진다. 파라미터는, 다른 파라미터나 경로의 일부와 세미콜론(;)으로 구분하여 기술하며, 여러 개를 가질 수 있다. 없음
질의 스킴에서 애플리케이션(데이터베이스, 게시판, 검색엔진, 기타 인터넷 게이트웨이)에 파라미터를 전달하는데 쓰인다. 질의 컴포넌트를 작성하는데 쓰이는 공통 포맷은 없다. 이는 URL의 끝에 "?"로 구분한다. 없음
프래그먼트 리소스의 조각이나 일부분을 가르키는 이름이다. URL이 특정 객체를 가리킬 경우에 프래그먼트 필드는 서버에 전달되지 않는다. 이는 클라이언트에서만 사용한다. URL의 끝에서 "#"문자로 구분한다. 없음
2.2.1 스킴: 사용할 프로토콜

스킴은 리소스에 어떻게 접근하는지 알려주는 중요한 정보다. 이는 URL을 해석하는 애플리케이션이 어떤 프로토콜을 사용하여 리소스를 요청해야 하는지 알려준다.
스킴 컴포넌트는 알파벳으로 시작해야 하고 URL의 나머지 부분들과 첫 번째’:’문자로 구분한다. 스킴 명은 대소문자를 가리지 않는다.

2.2.2 호스트와 포트
2.2.3 사용자 이름과 비밀번호

많은 서버가 자신이 가지고 있는 데이터에 접근을 허용하기 전에 사용자 이름과 비밀번호를 요구한다

2.2.4 경로

URL의 경로 컴포넌트는 리소스가 서버의 어디에 있는지 알려준다. 해당 경로는 계층적 파일 시스템 경로와 유사한 구조를 가진다.

2.2.5 파라미터

많은 스킴이 객체에 대한 호스트 및 경로 정보만으로는 리소스를 찾지 못한다. URL의 파라미터는 애플리케이션이 서버에 정확한 요청을 하기위해 필요한 입력 파라미터를 받는데 사용한다. 이컴포넌트는 이름/값 쌍의 리스트로 URL 나머지 부분들로 부터 ‘;’문자로 구분하여 URL에 기술한다. 이를 통해 애플리케이션이 리소스에 접근하는데 필요한 어떤 추가 정보든 전달할 수 있다.

2.2.6 질의 문자열

URL의 질의 컴포넌트는 게이트웨이를 가리키는 URL의 경로 컴포넌트와 함께 전달하고 있다. 보통 게이트웨이는, 다른 애플리케이션에 접근하려고 할 때 거치는 통로라고 할 수 있다
http://www.joes-hardware.com/inventory-check.cgi?item=12731&color=blue

2.2.7 프래그먼트

HTML 같은 리소스 형식들은 본래의 수준보다 더 작게 나뉠 수 있다. 예를 들어 절이 포함된 용량이 큰 한 개의 텍스트 문서의 경우, 그 리소스에 대한 URL은 텍스트 문서 전체를 가리키겠지만, 이상적으로는 리소스 안에 있는 특정 절을 가리킬 수 있어야 한다.
리소스의 특정 부분을 가리킬 수 있도록, URL은 리소스 내의 조각을 가리킬 수 있는 프래그먼트 컴포넌트를 제공한다.
일반적으로 HTTP 서버는 객체 일부가 아닌 전체만 다루기 때문에, 클라이언트는 서버에 프래그먼트를 전달하지 않는다. 브라우저는 서버로부터 전체 리소스를 내려받은 후, 프래그먼트를 사용하여 보고자하는 리소스의 일부를 보여준다.

2.3 단축 URL

웹 클라이언트는 몇몇 단축 URL을 인식하고 사용한다. 상대 URL은 리소스 안에 있는 리소스를 간결하게 기술하는데 사용할 수 있다. 많은 브라우저가 사용자가 기억하고 있는 URL일부를 입력하면 나머지 부분을 자동으로 입력해주는 URL’자동확장’을 지원한다.

2.3.1 상대 URL

URL은 상대 URL과 절대 URL 두가지로 나뉜다. 절대 URL은 리소스에 접근하는데 필요한 모든 정보를 가지고 있다. 상대 URL은 리소스에 접근하는데 필요한 모든 정보를 얻기 위해서 기저(base)라고 하는 다른 URL을 사용해야 한다.
상대 URL은 URL을 짧게 표기하는 방식이다.

기저 URL : http://www.joes-hardware.com/tools.html
상대 URL : ./hammers.html
새로운 절대 URL : http://www.joes-hardware.com/hammer.html

상대 URL 문법에 따르면 HTML 작성자는 URL에 스킴과 호스트 그리고 다른 컴포넌트들을 모두 입력하지 않아도 된다. 그 정보는 컴포넌트가 포함된 리소스의 기저 URL에서 알아낼 수 있다.
상대 URL은 프래그먼트이거나 URL 일부다. URL을 처리하는 브라우저 같은 애플리케이션은 상대 URL간에 상호 변환을 할 수 있어야 한다.

기저 URL
변환 과정의 첫 단계는 기저 URL을 찾는 것이다. 기저 URL은 상대 URL의 기준이 된다. 그것을 가져오는 몇 가지 방법이 있다.

리소스에서 명시적으로 제공
어떤 리소스들은 기저 URL을 명확하게 기술하기도 한다. 예를 들어 HTML 문서에서는 그 안에 있는 모든 상대 URL을 변경하기 위해서 기저 URL을 가리키는 HTML 태그를 기술할 수 있다.

리소스를 포함하고 있는 기저 URL
만약 상대 URL이 기저 URL을 명시되지 않은 리소스에 포함된 경우, 해당 리소스의 URL을 기저 URL로 쓸수 있다.

기저 URL이 없는 경우
기저 URL이 없는 경우도 있다. 보통 이런 경우는 절대 URL만으로 이루어져 있다는 뜻이다. 하지만 불완전하거나 깨진 URL일 수도 있다.

상대 참조 해석하기
RFC 2396참조

2.3.2 URL 확장

호스트명 확장

히스토리 확장

2.4 안전하지 않은 문자

Comments