URL은 HTTP 프로토콜 외의 다른 프로토콜에서도 사용된다
ex)
president@whitehouse.gov (이메일 주소)
ftp://ftp.lots-o-books.com/pub/complete-price-list.xls (FTP(File Transfer Protocol) 서버에 올라가있는 파일)
rtsp://www.joes-hardware.com:554/interview/cto_videos (스트리밍을 제공하기 위해 비디오 서버에 호스팅하고 있는 영화)
<스킴>://<사용자이름>:<비밀번호>@<호스트>:<포트>/<경로>;<파라미터>?<질의>#<프래그먼트>
스킴
: 어떤 프로토콜을 사용해서 서버에 접근해야 하는지
호스트와 포트
: 리소스를 가지고 있는 인터넷상의 호스트 장비를 가리킴 (HTTP의 기본 포트는 80, HTTPS는 443)
사용자 이름과 비밀번호
: 어떤 스킴에서는 리소스에 접근하기 위해 이름과 비밀번호를 요구함.
ex) FTP 서버 - ftp://anonymous:my_passwd@ftp.prep.ai.mit.edu/pub/gnu
파라미터
: 리소스에 접근하는데 필요한 추가 정보를 전달
ex) ftp://prep.ai.mit.edu/pub/gnu;type=d
프래그먼트
: HTML과 같은 리소스 형식들은 본래의 수준보다 더 작게 나뉠 수 있다.
ex) http://www.joes-hardware.com/tools.html#drills
다만 HTTP 서버는 객체 일부가 아닌 전체만 다루기 때문에, 브라우저는 서버로부터 프래그먼트가 아닌 전체 리소스를 내려받고 프래그먼트를 통해 그 일부를 보여준다.
브라우저는 사용자가 URL 일부를 입력하면 나머지 부분을 자동으로 입력해주는 URL 자동 확장을 지원한다.
1) 호스트명 확장
yahoo만 쳐도 www와 com을 붙여서 www.yahoo.com을 만드는 것
하지만 호스트 명에 대한 확장 기능은 프락시와 같은 다른 HTTP 애플리케이션에 문제를 발생시킬 수도 있다(6장에서 다룸)
2) 히스토리 확장
방문했던 URL 기록을 저장해두고 일부 입력시 검색 기록을 제시해주는 것
URL은 상대 URL과 절대 URL로 나뉜다. 상대 URL은 base URL을 사용해서 절대 URL로 변환된다.
URL은 어떤 프로토콜을 이용하든 정보가 유실될 위험없이 URL을 전송할 수 있어야한다.
그런데 전자메일에 사용되는 SMTP(Simple Mail Transfer Protocol) 같은 프로토콜은 특정 문자를 제거할 수도 있는 전송 방식을 사용한다. (메시지가 7비트 인코딩을 사용하기 때문에. 소스가 8비트 이상으로 인코딩 되어있으면 정보가 소실될 수 있다)
따라서 URL은 이런 프로토콜에서도 안전한 전송을 하기 위해 상대적으로 적은 수의, 일반적으로 안전한 알파벳 문자만 URL에 포함되도록 허락
한다.
또, URL은 여기에 더해서 더 안전한 설계를 위해 일반적으로 안전한 알파벳 외의 문자가 포함되려고 할 때 이스케이프라는 기능을 제공
한다.
escape: 안전하지 않은 문자를 안전한 문자로 인코딩해주는 것
URL에는 US_ASCII가 지원하는 문자들 외에, 다른 이진 데이터를 포함하기 위해 이스케이프 문자열을 쓸 수 있게 설계되었다. 이 이스케이프 문자열을 통해 특정 문자나 데이터를 인코딩해준다.
인코딩은 안전하지 않은 문자
를 %와 ASCII 코드로 표현되는 두개의 16진수 숫자
로 이루어진 이스케이프 문자
로 바꾼다.
ex)
몇몇 문자는 URL 내에서 특별한 의미로 예약되어 있다.
그런데 사실, 안전하지 않은 문자를 URL에 사용해도 아무런 문제가 발생하지 않는 경우가 많다. 그러나, 어떤 전송 프로토콜에서는 이것이 문제가 되지 않더라도, 애플리케이션 개발자들이 안전하지 않은 문자를 인코딩하지 않은 것은 실수이다.
따라서 애플리케이션(특히 client)에서 안전하지 않거나 제한된 문자를 변환해주는 것이 좋다.(client가 이걸 인코딩하기에 좋은 위치이기 때문에..)
http
: 사용자 이름이나 비밀번호가 없다는 것을 제외하고는 일반 URL 포맷을 지키는 하이퍼텍스트 전송 프로토콜 스킴. 포트값은 default 80https
: http와 다른점은 http의 커넥션 양 끝단에서 암호화를 위해 넷스케이프에서 개발한 보안 소켓 계층(Secure Sockets Layer, SSL)을 사용하는 것. 기본 포트값은 443malito
: mailto URL은 이메일 주소를 가리킴. 이메일은 다른 스킴과 다르게 동작하기 떄문에, 이메일 주소 문법은 RFC 822에 기술되어 있음. ftp
: 파일 전송 프로토콜. FTP URL은 FTP 서버에 있는 파일을 내려 받거나 올리고, 해당 서버 디렉터리에 있는 콘텐츠 목록을 가져오는데 사용 가능. 웹과 URL이 출현하기 전부터 있었던 프로토콜. 기본 형식:
ftp://<사용자 이름>:<비밀번호>@<호스트>:<포트>/<경로>;<파라미터>
rtsp, rtspu
: 실시간 스트리밍 프로토콜(Real Time Streaming Protocol). RTSP URL은 서버에서 읽을 수 있는 오디오, 비디오 등 미디어 리소스 식별자기본 형식:
rtsp://<사용자 이름>:<비밀번호>@<호스트>:<포트>/<경로>
rtspu://<사용자 이름>:<비밀번호>@<호스트>:<포트>/<경로>
-> 매우 오래된 스트리밍 프로토콜로, 현재는 CCTV 등에서 쓰인다. 현재 많이 쓰이는 스트리밍 프로토콜로는 HLS(Adaptive Streaming의 한 종류), MPEG-DASH, RTMP 등이 있다.
file
: 해당 서버(호스트 기기)에서 바로 접근할 수 있는 파일들. 만약 호스트가 생략되어있다면 URL을 사용하고 있는 기기의 로컬 호스트가 기본값이 됨.기본형식:
file://<호스트>/<경로>
news
: 특정 문서나 뉴스 그룹에 접근하는데 사용. news URL은 리소스 위치 정보를 충분히 포함하지 않는 특이한 속성을 지님.telnet
: 대화형 서비스(애플리케이션)에 접근하는데 사용.기본형식:
telnet://<사용자이름>:<비밀번호>@<호스트>:<포트>/
URL의 단점은 리소스 위치가 옮겨지면 사용할 수 없다는 것. 그래서 이상적인 것은 위치와 관계없이 그 객체를 가리키는 실제 객체의 이름을 사용하는 것. 그게 바로 URN.
지속 통합 자원 지시자(PURL, Persistent uniform resouce locators)을 사용하면 URL로 URN의 기능을 제공 가능하다. PURL은 리소스의 실제 URL 목록을 관리하고 추적하는 리소스 위치 중개 서버를 두고, 해당 리소스를 우회적으로 제공한다.
널리 쓰이던 URL이라는 체계를 바꾸는 것은 매우 큰 작업.
URL이 나름의 한계를 가지고 있지만, 이게 가장 긴급한 사안은 아니기 때문에 당분간은 계속 사용될듯.