- 인터넷의 리소스를 가리키는 표준 이름
- 리소스(resource): 웹에서 사용되는 식별이 가능한 모든 자원

URL 문법
기본형태
<scheme>://<user>:<pwd>@<host>:<port>/<route>;<param>?<query>#<fragment>
scheme
- 사용할 프로토콜 (how)
- 주어진 리소스에 접근하는 방법
- 대소문자를 가리지 않음 (http = HTTP)
host, port
- host: 접근하려고 하는 리소스를 가지고 있는 인터넷 상의 호스트 장비
- port: 서버가 열어놓은 네트워크 포트 (HTTP는 기본 포트로 80 사용)
사용자 이름, 비밀번호
경로
- 서버 내 리소스 위치
- HTTP URL에서 경로 컴포넌트는 ‘/’ 문자를 기준으로 경로 조각으로 나뉠 수 있음
parameter
- 애플리케이션이 서버에 정확한 요청을 하기 위해 사용
- ‘이름=값’ 쌍의 형식
- ‘;’ 문자로 구분
- ex)
http://www.joes-hardware.com/hammers;sale=false
query string
- 요청할 리소스 형식의 범위를 좁히기 위해 사용
- 대표적 예: 데이터베이스 게이트웨이에 질의 요청
- ‘&’ 문자로 구분
- ‘이름=값’ 쌍의 형식
- ex)
http://wsww.joes-hardware.com/inventory-check.cgi?item=12731
fragment
- 리소스의 특정 부분(fragment)를 가리킬 수 있는 컴포넌트
- ex)
http://www.joes-hardware.com/tools.html#drills
- /tools.html의 일부(’drills’)를 가리키는 셈
- 일반적으로 HTTP 서버는 객체 단위로만 전송하기 때문에 브라우저가 서버로부터 전체 리소스를 내려받은 후, fragment를 사용하여 특정 리소스의 일부를 보여줌
상대 URL
- 기저(base) URL 을 이용해 URL을 짧게 표기하는 방식
<HTML>
<HEAD>
<TITLE> Joe's Tools </TITLE>
</HEAD>
<BODY>
<H1> Tools Page </H1>
<H2> Hammers <H2>
<P> Joe's Hardware Online has the largest selection </P>
<P> of <A href="./hammers.html">hammers</A> on earth. </P>
</BODY>
</HTML>
- 위의 HTML 코드에서 ‘./hammers.html’ 가 상대 URL의 예시
- URL에 scheme, host, 기타 컴포넌트를 모두 입력할 필요X
- 컴포넌트가 포함된 리소스의 base URL에서 알아냄
URL 확장
호스트명 확장
- 단순히 heuristic만을 사용해서 전체 호스트명으로 확장
‘yahoo’
→ ‘www.yahoo.com’
- 그러나 호스트명 확장은 proxy와 같은 다른 HTTP 애플리케이션에 문제를 발생시킬 수 있음
히스토리 확장
- 과거에 사용자가 방문했던 URL의 기록을 저장
‘http://www.joes’
→ ‘http://www.joes-hardware.com’
URL의 중요성
- 서로 다른 장치에서 데이터를 전송할 때 어떤 프로토콜을 통해서도 안전히 전송될 수 있도록 URL 을 설계하는 것은 중요
- 안전한 전송 ⇒ 정보가 유실될 위험 없이 URL을 전송할 수 있다는 것
- 이스케이프: 알파벳 외의 안전하지 않은 문자를 안전한 문자로 인코딩하는 것
US-ASCII
- 7-bit를 사용하여 영문 자판에 있는 키 대부분과 출력되지 않는 몇몇 제어 문자 표현
인코딩
- 안전하지 않은 문자를
- { ‘%’ + ASCII 코드로 표현되는 두 개의 16진수} 로 이루어진 ‘이스케이프’ 문자로 변환
- 예시
- ‘~’ → 126(0x7E) =⇒ (URL 상에서) “%7E”
- ‘%’ → 37(0x25) =⇒ (URL 상에서) “%25”
- URL에서 특정 용도로 예약된 문자(%, /, $, …)를 다른 용도로 쓰려면 반드시 인코딩
대표적인 Schemes
http
- 기본 포트값 80
- 기본형식
http://<host>:<port>/<route>?<query>#<fragment>
- 예시
http://www.joes-hardware.com/index.html
http://www.joes-hardware.com:80/index.html
https
- HTTP 커넥션의 양 끝단에서 SSL(Secure Sockets Layer) 사용해서 암호화가 일어남
- 기본 포트값 443
- 문법은 HTTP와 동일
ftp
- 파일 전송 프로토콜(file transfer protocol)
- FTP서버에 있는 파일을 올려/내려 받거나, 서버 디렉터리에 있는 콘텐츠 목록을 가져옴
- 기본형식
ftp://<사용자명>:<비밀번호>@<host>:<port>/<route>:<param>
- 예시
ftp://anonymous:joe%40joes-hardware.com@prep.ai.mit.edu:21/pub/gnu
rtsp, rtspu
- 실시간 스트리밍 프로토콜(real time streaming protocol)
- 오디오나 비디오 등의 미디어 리소스를 식별
- rtspu는 rstp 프로토콜에 추가로 UDP 프로토콜이 사용됨
- 기본형식
rtsp://<사용자명>:<비밀번호>@<host>:<port>/<route>
- 예시
rtsp://www.joes-hardware.com:554/interview/cto_video
telnet
- 대화형 서비스에 접근하는데 사용
- telnet URL 자체가 객체를 가리키지는 않음
- 대화형 애플리케이션 역시도 리소스이므로 telnet 프로토콜을 통해 접근 가능
- 기본형식
telent://<사용자명>:<비밀번호>@<host>:<port>/
- 예시
telnet://slurp:webhound@joes-hardware.com:23/