개요

  • URI : Uniform Resource Identifier
    • URL : Uniform Resource Locator
    • URN : Uniform Resource Name

URI

  • URI: 통합 자원 ‘식별자’
  • 인터넷 상의 정보 리소스를 고유하게 식별할 수 있다.
  • URI는 URL과 URN이라는 두 가지 형태가 존재한다.

다음은 RFC 3986의 3. Syntax Components에서 발췌한 URI의 syntax example이다.

The following are two example URIs and their component parts:

     foo://example.com:8042/over/there?name=ferret#nose
     \_/   \______________/\_________/ \_________/ \__/
      |           |            |            |        |
   scheme     authority       path        query   fragment
      |   _____________________|__
     / \ /                        \
     urn:example:animal:ferret:nose

위가 URL이고, 아래가 URN이다.

URL

  • 통합 자원 ‘지시자’
  • 누구나 흔하게 접하는 그 URL이 맞다.

URL 포맷은 크게 세 부분으로 이루어져 있다.

  • scheme: 리소스에 접근할 때 사용하는 프로토콜을 명시한다. http:, ftp:, mailto: 등이 이에 해당한다.
  • 호스트: 서버의 인터넷 주소
  • 리소스

예를 들어 http://johngrib.github.io/wiki/URI/index.html라는 URL이 있다면 다음과 같이 파악할 수 있다.

  • scheme: http://
  • 서버의 인터넷 주소: johngrib.github.io
  • 리소스: /wiki/URI/index.html

fragment

프래그먼트는 다음 예제와 같이 URL 마지막에 #과 함께 붙는다.

http://johngrib.github.io/wiki/URI.md#fragment

위의 예제에서 #fragment는 서버에 전달되지 않는다.

프래그먼트 처리는 브라우저가 서버로부터 리소스를 다운받은 다음에 이루어진다.

URN

  • 통합 자원 ‘이름’
  • 리소스의 위치에 영향을 받지 않는 고유한 이름이다.
  • 위치 독립적이기 때문에 리소스가 다른 곳으로 옮겨져도 작동해야 한다.

참고

URI 파싱 정규식

다음은 RFC 3986의 “Appendix B. Parsing a URI Reference with a Regular Expression”에 수록된 URI 파싱 정규식이다. (숫자는 캡처 그룹 넘버.)

^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
 12            3  4          5       6  7        8 9

이 정규식을 regexper.com에 넣고 돌리면 다음과 같은 기차 선로 다이어그램이 나온다(//\/\/로 수정해야 돌아간다).

regex

만약 http://www.ics.uci.edu/pub/ietf/uri/#Related라는 URI를 이 정규식으로 파싱한다면 다음과 같은 캡처 그룹을 확보할 수 있다.

그룹 컴포넌트 캡처한 내용
$1   http:
$2 scheme http
$3   //www.ics.uci.edu
$4 authority www.ics.uci.edu
$5 path /pub/ietf/uri/
$6  
$7 query
$8   #Related
$9 fragment Related

URI의 창시자가 직접 만든 정규식이니 유용하게 사용하자.

상대 URL을 절대 URL로 파싱하는 알고리즘

RFC 3986의 5.2. Relative Resolution(29~33 쪽)에 나와 있다.

Links

참고문헌

  • HTTP 완벽 가이드
    • David Gourley, Brian Totty, Marjorie Sayer, Sailu Reddy, Anshu Aggarwal 지음 (2002, O’Reilly Media)
    • 이응준, 정상일 옮김 (2016 초판 2쇄, Republic of Korea, Insight Press 2014(인사이트))
    • 교보문고
    • 알라딘