[HTTP 완벽가이드] URL과 리소스
URL과 리소스
URL(Uniform Resource Locator)은 브라우저가 정보를 찾는데 필요한 리소스의 위치를 가리키며, URL을 이용해 사람과 애플리케이션이 인터넷상의 수십억 개의 리소스를 찾고 사용하며 공유할 수 있다.
http://www.joes-hardware.com/seasonal/index-fall.html
- 첫 부분인 http:// 는 URL의 스킴이다. 웹 클라이언트가 리소스에 어떻게 접근하는지 알려준다.
- www.joes-hardware.com 은 서버의 위치다. 웹 클라이언트가 해당 리소스가 어디에 호스팅이 되어 있는지 알려준다.
- /seasonal/index-fall.html는 서버에 존재하는 로컬 리소스들 중에서 요청받은 리소스가 무엇인지 알려준다.
이와 같이 URL을 사용하면 리소스를 일관된 방식으로 지칭할 수 있다. 대부분의 URL은 동일하게 스킴://서버위치/경로
구조로 이루어져 있다.
URL 문법
URL 문법은 스킴에 따라서 달라진다. 대부분의 URL 스킴의 문법은 일반적으로 9개 부분으로 나뉜다.
<스킴>://<사용자 이름="">:<비밀번호>@<호스트>:<포트>/<경로>;<파라미터>?<질의>#<프레그먼트> 프레그먼트>질의>파라미터>경로>포트>호스트>비밀번호>사용자>스킴>
컴포넌트 | 설명 | 기본값 |
---|---|---|
스킴 | 리소스를 가져오려면 어떤 프로토콜을 사용하여 서버에 접근해야 하는지 가리킨다. | |
사용자 이름 | 몇몇 스킴은 리소스에 접근을 허기 위해 사용자 이름을 필요로 한다. | anonymous |
비밀번호 | 사용자의 비밀번호를 가리키며, 사용자 이름에 콜론(:)으로 이어서 기술한다. | <아메일 주소="">아메일> |
호스트 | 리소스를 호스팅하는 서버의 호스트 명이나 IP 주소. | 없음 |
포트 | 리소스를 호스팅하는 서버가 열어놓은 포트번호. 많은 스킴이 기본 포트를 가 스킴에 따라 다름 지고 있다(HTTP의 기본 포트는 80이다). | |
경로 | 이전 컴포넌트와 빗금(/)으로 구분되어 있으며, 서버 내 리소스가 서버 어디에 없음 있는지를 가리킨다. 경로 컴포넌트의 문법은 서버와 스킴에 따라 다르다. (이 경 우에서는 URL의 경로를 세그먼트로 나눌 수 있고, 각 세그먼트는 자체 컴 포넌트를 가질 수 있다는 것을 알게 될 것이다.) | |
파라미터 | 특정 스킴들에서 입력 파라미터를 기술하는 용도로 사용한다. 파라미터는 이 없음 름/값을 쌍으로 가진다. 파라미터는, 다른 파라미터나 다음의 일부와 세미콜 론(;)으로 구분하여 기술하며, 여러 개를 가질 수 있다. | |
질의 | 스킴에서 애플리케이션(데이터베이스, 게시판, 검색엔진, 기타 인터넷 게이트 없음 웨이)에 파라미터를 전달하는데 쓰인다. 질의 컴포넌트를 작성하는데 쓰이는 공통 포맷은 없다. 이는 URL의 끝에 ‘?’로 구분한다. | |
프래그먼트 | 리소스의 조각이나 일부분을 가리키는 이름이다. URL이 특정 객체를 가리킬 없음 경우에 프래그먼트 필드는 서버에 전달되지 않는다. 이는 클라이언트에서만 사용한다. URL의 끝에서 ‘#’문자로 구분한다. |
안전하지 않은 문자
안전한 전송이란, 정보가 유실될 위험 없이 URL을 전송할 수 있다는 것을 의미한다.
URL 설계자는 사람들이 URL에 이진 데이터나 일반적으로 안전한 알파벳 외의 문자도 포함하려고 할 때가 있다는 것을 알게 되었다. 그래서 이스케이프라는 기능을 추가하여, 안전하지 않은 문자를 안전한 문자로 인코딩할 수 있게 하였다.
인코딩 체계
인코딩은 안전하지 않은 문자를 퍼센티지 기호(%)로 시작해, ASCII 코드로 표현되는 두 개의 16진수 숫자로 이루어진 ‘이스케이프’ 문자로 바꾼다.
문자 | ASCII 코드 | URL 의 예 |
---|---|---|
~ | 126 (0x7E) | http://www.joes-hardware.com/%7Ejoe |
빈 문자 | 32 (0x20) | http://www.joes-hardware.com/more%20tools.html |
% | 37 (0x25) | http://www.joes-hardware.com/100%25satisfaction.html |
문자 제한
몇몇 문자는 URL 내에서 특별한 의미로 예약되어 있다.
아래 표는 URL에서 예약된 문자들을 본래의 목적이 아닌 다른 용도로 사용하려면, 그전에 반드시 인코딩 해야하는 문자들을 나열해 놓았다.
문자 | 설명 및 제한 |
---|---|
% | 인코딩된 문자에 사용할 이스케이프 토큰으로 선점 |
/ | 경로 컴포넌트에 있는 경로 세그먼트를 나누는 용도로 선점 |
. | 경로 컴포넌트에서 선점 |
.. | 경로 컴포넌트에서 선점 |
# | 프래그먼트의 구획 문자로 선점 |
? | 질의 문자열의 구획 문자로 선점 |
; | 파라미터의 구획 문자로 선점 |
: | 스킴, 사용자 이름/비밀번호, 호스트/포트의 구획 문자로 선점 |
$, + | 선점 |
@&= | 특정 스킴에서 특별한 의미가 있기 때문에 선점 |
{} | \ ^ [] ` | 게이트웨이와 같은 여러 전송 에이전트에서 왜곡전하게 다루기 때문에 제한됨 |
<> “ | 안전하지 않음. 웹 문서에서 URL을 구분 지어 표시하도록(예를 들어 ‘http://www.joes-hardware.com’), URL 범위 밖에서 역할이 있는 문자이기 때문에 반드시 인코딩해야 한다. |
0x00-0x1F, 0x7F | 제한됨. 이 16진수 범위에 속하는 문자들은 인쇄되지 않는 US-ASCII 문자다. |
>0x7F | 제한됨. 이 16진수 범위에 속하는 문자들은 7비트 US-ASCII 문자가 아니다. |
이처럼 안전하지 않은 문자를 인코딩하기만 하면, 다른 애플리케이션으로 부터 특별한 의미를 가지는 문자를 받았을 때 혼동할 걱정 없이, 애플리케이션간에 공유할 수 있는 URL의 원형을 유지할 수 있다.
스킴
웹에서 쓰이는 일반 스킴들의 포맷
스킴 | 설명 |
---|---|
http | 사용자 이름이나 비밀번호가 없는 것을 제외하고는, 일반 URL 포맷을 지키는 하이퍼텍스트 전송 프로토콜(Hypertext Transfer Protocol) 스킴이다. 포트값이 생략되어 있으면 기본값은 80이다. 기본형식: http://⟨호스트⟩:⟨포트⟩/⟨경로⟩?⟨질의⟩#⟨프래그먼트⟩ 예: http://www.joes-hardware.com/index.html http://www.joes-hardware.com:80/index.html |
https | https 스킴은 http 스킴과 거의 같다. 다른 점이라고는 https는 HTTP의 커넥션의 한 끝단에서 암호화하기 위해 넷스케이프에서 개발한 보안 소켓 계층(Secure Sockets Layer, SSL)을 사용한다는 것뿐이다. 포맷은 HTTP와 같고 기본 포트값은 443이다. 기본형식: https://⟨호스트⟩:⟨포트⟩/⟨경로⟩?⟨질의⟩#⟨프래그먼트⟩ 예: https://www.joes-hardware.com/secure.html |
mailto | mailto URL은 이메일 주소를 가리킨다. 이메일은 다른 스킴과는 다르게 동작하기 때문에, mailto URL은 표준 URL과는 다른 포맷을 가진다. 인터넷 이메일 주소의 문법은 RFC 822에 기술되어 있다. 기본형식: mailto:⟨RFC-822-addr-spec⟩ 예: mailto:joe@joes-hardware.com |
ftp | 파일 전송 프로토콜(File Transfer Protocol) URL은 FTP 서버에 있는 파일을 내려 받거나 올리기 위해 FTP 서버의 디렉터리에 있는 콘텐츠 목록을 가져오는 데 사용할 수 있다. FTP는 웹과 URL이 출현하기 전부터 있었다. 웹 애플리케이션은 데이터에 접근하는 용도의 수단으로 FTP를 사용한다. URL 문법은 다음과 같이 일반적인 URL 포맷이다. 기본형식: ftp://⟨사용자 이름⟩:⟨비밀번호⟩@⟨호스트⟩:⟨포트⟩/⟨경로⟩;⟨파라미터⟩ 예: ftp://anonymous:joe%40joes-hardware.com@prep.ai.mit.edu:21/pub/gnu/ |
rtsp, rtspu | RTSP URL은 실시간 스트리밍 프로토콜(Real Time Streaming Protocol)을 통해서 읽을 수 있는 오디오 및 비디오와 같은 미디어 리소스 식별자다. rtspu 스킴에 있는 u는 리소스를 읽기 위해서 UDP 프로토콜이 사용됨을 뜻한다. 기본형식: rtsp://⟨사용자 이름⟩:⟨비밀번호⟩@⟨호스트⟩:⟨포트⟩/⟨경로⟩ rtspu://⟨사용자 이름⟩:⟨비밀번호⟩@⟨호스트⟩:⟨포트⟩/⟨경로⟩ 예: rtsp://www.joes-hardware.com:554/interview/cto_video |
file | file 스킴은 주어진 호스트 기기(로컬 디스크, 네트워크 파일 시스템 혹은 기타 파일 공유 시스템)에서 바로 접근할 수 있는 파일들을 나타낸다. 각 필드는 일반적인 URL 문법을 따르다. 만약 호스트가 생략되어 있으면, URL을 사용하고 있는 기기의 로컬 호스트가 기본값이 된다. 기본형식: file://⟨호스트⟩/⟨경로⟩ 예: file://OFFICE-FS/policies/casual-fridays.doc |
news | news 스킴은 RFC 1036에 정의된 방식 같이 특정 문서나 뉴스 그룹에 접근하는데 사용한다. news URL은 리소스의 위치 정보를 충분히 포함하지 않는 특이한 속성이 있다. news URL은 해당 리소스가 어디에 있는지에 대한 정보를 포함하지 않는다. 호스트 명이나 서버 이름도 제공하지 않는다. 사용자로부터 그 정보를 알아내는 것은 애플리케이션의 몫이다. 예를 들어 넷스케이프 브라우저는 음성 메뉴에서 NNTP(news) 서버를 명시할 수 있다. URL을 만뢉 방은 브라우저는, 현재 설정되어 있는 뉴스 서버 정보를 사용하여 연결 서버부터 뉴스를 가져올지 결정한다. 뉴스 리소스는 여러 서버를 통해 접근할 수 있다. 뉴스 리소스에 접근하는 것이 하나의 서버로만 접근할 수 있는 게 아니므로, 위에서 특화되어 있고 볼 수 있다. news URL에서 ‘@’심볼은 ‘문자는 뉴스 그룹을 가리키는 뉴스 URL과 특정 뉴스 문서를 가리키는 뉴스 URL을 구분하기 위해 사용한다. 기본형식: news:⟨newsgroup⟩ news:⟨news-article-id⟩ 예: news:rec.arts.startrek |
telnet | telnet 스킴은 대화형 서비스에 접근하는데 사용한다. telnet URL 자체가 장체를 가리키지는 않지만, 리소스라고 할 수 있는 대화형 애플리케이션은 이 telnet 프로토콜을 통해 접근할 수 있다. 기본형식: telnet://⟨사용자 이름⟩:⟨비밀번호⟩@⟨호스트⟩:⟨포트⟩/ 예: telnet://slurp:webhoubd@joes-hardware.com:23/ |
댓글남기기