2장 URL과 리소스

인터넷의 리소스 탐색하기

리소스 : 웹에서 사용되는 식별을 할 수 있는 모든 자원
URL : 브라우저가 정보를 찾는데 필요한 리소스의 위치

  • URI(Uniform Resource Identifier)의 부분집합이다.
  • HTTP명세에서는 URI를 더 일반화된 개념의 리소스 식별자로 사용하나 대부분 URL과 URI를 혼용해서 사용한다.
  • 예를 들어 http://www.joes-hardware.com/seaseon/index-fall.html 이라는 URL을 불러오면
    • http는 URL의 스킴으로 어떻게 웹 클라이언트가 리소스에 접근하는지 알려준다.
    • www.joes-hardware.com은 서버의 위치이다. 웹 클라이언트가 리소스가 어디에 호스팅되어 있는지 알려준다.
    • /seaseon/index-fall.html은 리소스의 경로다. 경로는 서버에 존재하는 로컬 리소스들 중에서 요청 받은 리소스가 무엇인지 알려준다.
  • URL은 HTTP 프로토콜이 아닌 다른 가용한 프로토콜을 사용할 수도 있다. 이메일 주소mailto, FTP서버의 파일ftp, 스트림ㅁ밍을 제공하기 위해 비디오 서버에 호스팅하고 있는 영화rtsp
  • 이렇게 URL을 사용하면 리소스를 일관된 방식으로 지칭할 수 있다. 이로 인해 모든 사람이 같은 명명된 방식으로 리소스를 찾을 수 있게 된다.

URL이 있기 전 암흑의 시대

URL이 있기 전에는 친구에게 파일을 공유하기 위해 많은 설명이 필요했다.
하지만 URL이 생기고 나서는 웹 브라우저에서 ftp://ftp.lots-o-books.com/pub/complete-catalog.xls을 열어봐 라고 말하면 끝이다.
또한 웹 브라우저를 이용하면 사용자가 리소르를 가져오는데 사용되는 프로토콜을 알지 않아도 될 뿐더러 리소스를 가져오기 위한 클라이언트가 따로 필요없이 쉽게 접근 할 수 있게된다.

URL 문법

URL로 인터넷상의 모든 리소스를 찾을 수 있다. 하지만 그 리소스들은 다른 스킴을 통해 접근할 수 있으며, URL 문법은 스킴에 따라 달라진다.

대부분의 URL 스킴의 문법은 일반적으로 9개로 나뉜다.

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

스킴: 사용할 프로토콜

  • 스킴은 리소스에 접근하기 위해 사용할 프로토콜을 정의한다.
  • 스킴은 알파벳으로 시작하고 대소문자를 구분하지 않는다.
  • URL의 나머지 부분들과 첫 번째 콜론(:)으로 구분된다.

호스트와 포트 : 리소스가 호스팅되어 있는 서버

http://www.joes-hardware.com:80/index.html
http://161.58.228.45.80/index.html
  • 호스트는 리소스를 호스팅하고 있는 서버를 가리킨다.
    • 호스트는 도메인 이름이나 IP 주소로 지정할 수 있다.
  • 포트는 서버가 열어놓은 네트워크 포트를 가리킨다.
    • 내부적으로 TCP 프로토콜을 사용하는 HTTP는 기본 포트로 80을 사용한다.
    • 포트는 생략될 수 있으며 생략하면 기본 포트인 80이 사용된다.
    • 포트는 숫자로 지정되며 0~65535까지 사용할 수 있다.
    • 포트는 콜론(:)으로 호스트와 구분된다.

사용자 이름과 비밀번호 : 리소스에 접근하기 위한 권한

ftp://ftp.prep.ai.mit.edu/pub/gnu
ftp://anonymous@ftp.prep.ai.mit.edu/pub/gnu
ftp://anonymous:my_password@ftp.prep.ai.mit.edu/pub/gnu
http://woo:my_password@www.joes-hardware.com/sales_info.txt
  • 첫번째 예제는 사용자 이름과 비밀번호가 없는 경우이다.
    • 사용자 이름과 비밀번호를 기술하지 않는 경우에는 기본 사용자 이름과 비밀번호 값을 넣어놓는다.
    • FTP의 경우 기본 사용자 이름은 anonymous이고 비밀번호는 브라우저마다 가지고 있는 기본 비밀번호를 사용한다.
  • 두번째 예는 사용자 이름이 anonymous인 경우이다.
    • @문자는 사용자 이름과 비밀번호를 호스트와 구분하기 위해 사용된다.
  • 세번째 예는 사용자 이름이 anonymous이고 비밀번호가 my_password인 경우이다.
    • 사용자 이름과 비밀번호는 :문자로 구분된다.

경로 : 서버의 리소스

http://www.joes-hardware.com/seasonal/index-fall.html
  • URL의 경로는 서버의 리소스를 가리킨다.
  • 경로는 /문자로 구분된다.
  • 경로는 서버의 유닉스 파일 시스템의 디렉터리와 파일 이름과 유사하다.
  • 각 경로조각은 자체만의 파라미터 컴포넌트를 가질 수 있다.

파라미터 : 리소스에 전달되는 추가적인 정보

많은 스킴이 객체에 추가적인 정보를 전달하기 위해 파라미터를 사용한다.
파라미터는 ;문자로 구분되며 이름=값쌍으로 구성된다.

http://www.joes-hardware.com/inventory-check;user=woo
  • 위 예제는 user라는 파라미터를 가지고 있다.
  • 파라미터는 스킴에 따라 다르게 해석된다.
    http://www.joes-hardware.com/inventory-check;user=woo;/index.html;size=large
    
  • 위 처럼 두 개의 경로조각에 각 각 파라미터를 가질 수 있다.

질의 : 리소스에 전달되는 추가적인 정보

http://www.joes-hardware.com/inventory-check?item=12731&color=blue&size=large
  • 질의는 ?문자로 구분된다.
  • 질의는 이름=값쌍으로 구성된다.
  • 질의는 편의상 &로 나뉜 여러 개의 이름=값 쌍을 가질 수 있다.
  • 악의적인 문자열이 아닌 이상 질의는 딱히 제한사항이 없다.

프래그먼트 : 리소스의 조각

http://www.joes-hardware.com/tools.html#drills
  • 프래그먼트는 #문자로 구분된다.
  • 프래그먼트는 리소스의 특정한 조각을 가리킨다.
  • 위 예제에는 tools.html이라는 웹 페이지 일부인 drills라는 조각을 가리킨다.
  • 보통 HTTP 서버는 객체 일부가 아닌 전체만 다루기 때문에 클라이언트는 서버에 프래그먼트를 전달하지 않는다.

단축 URL

상대 URL

  • URL은 상대 URL과 절대 URL로 나뉜다.
  • 절대 URL은 모든 정보를 담고 있고 상대 URL은 일부 정보만 담고 있다.
  • 상대 URL은 기본적으로 기저 URL(base)을 기반으로 한다.
// base URL
http://www.joes-hardware.com/tools.html
<html>
  <head>
    <title>Sample Page</title>
  </head>
  <body>
    <a href="./hammers.html">Spring promotions</a>
  </body>
</html>
  • 위 예에서 href속성의 값은 ./hammers.html이다.
  • 이 경우 웹 서버의 /tools.html 리소스를 기준으로 상대경로로 명시되었다.
  • 기존 기저 URL http://www.joes-hardware.com/tools.html 을 기준으로 추측하여 새로운 절대 URL을 만들어낸다.
  • 상대 URL은 기저 URL을 기반으로 하기 때문에 기저 URL이 변경되면 상대 URL도 변경된다.
  • 또한 프래그먼트 또한 기저 URL을 기반으로 한다.

상대 참조 해석하기 알고리즘 한번씩 자세히 보기

URL 확장

브라우저에서 URL을 입력하면 브라우저는 URL을 확장한다.
이러한 확장기능은 두가지로 나뉘는데
호스트 명 확장과 히스토리 확장이 있다.
사실 중요한 내용으로는 안보인다.

안전하지 않은 문자

URL은 인터넷에 있는 모든 리소스가 여러 프로토콜을 통해서 전달 될 수 있도록 설계되었다.
따라서 안전한 전송을 위해 URL은 안전한 알파벳 문자만 포함하도록 허락한다.
하지만 URL은 인터넷에서 사용되는 모든 문자를 표현할 수 있어야 한다.
이에 따라 이스케이프라는 기능이 추가되어 안전하지 않은 문자를 인코딩할 수 있게 하였다.

URL 문자 집합

  • URL은 128개의 7비트 ASCII 문자 집합을 사용한다.
  • URL 설계자들은 URL에 이스케이프 문자열을 쓸 수 있도록 설계하여 URL에 안전하지 않은 문자를 표현할 수 있게 하였다.

인코딩 체계

  • URL은 안전하지 않은 문자를 표현하기 위해 인코딩 체계를 사용한다.
  • 인코딩 체계는 %문자와 두개의 16진수 숫자로 구성된다.
문자 ASCII 코드 URL의 예
빈 문자 32 %20
% 37 %25
~ 126 %7E

문자 제한

몇몇 문자는 URL 내에서 특별한 의미를 가지기 때문에 사용할 수 없다.
약간의 예시를 나열하면 다음과 같다.

문자 선점 및 제한
# 프래그먼트
% 인코딩
& 질의
+ 공백
/ 경로
: 스킴, 포트
; 파라미터
= 파라미터, 질의
? 질의
@ 사용자 이름, 비밀번호
[ IPv6
\ 경로
] IPv6
^ 인증
` 인증

미래

URL은 강력한 도구 이지만 완벽한 것은 아니다.
이에 따라 URL을 대체할 수 있는 URN(Uniform Resource Name)이라는 개념이 등장하였다.
URN은 리소스의 위치가 아닌 리소스의 이름을 가리킨다.
하지만 URN은 아직까지는 실험적인 단계이다.
URL에서 URN으로 주소 체계를 바꾸는 것은 매우 큰 작업 이기 때문에 아직까지는 URL이 사용된다.

results matching ""

    No results matching ""