티스토리 뷰

책/misc

2장. URL과 리소스

kingsubin 2022. 4. 25. 00:22

2장. URL과 리소스

키워드 정리

  • URL 문법
  • 다양한 스킴
  • 기본 사용자 이름과 브라우저별 패스워드
  • 조각 파라미터
  • 인코딩 체계

다룰 내용

  • URL 문법, URL 컴포넌트가 어떤 의미를 가지며 무엇을 수행하는지
  • 여러 웹 클라이언트가 지원하는 상대 URL과 확장 URL 같은 단축 URL에 대해
  • URL의 인코딩과 문자 규칙
  • 여러 인터넷 정보 시스템에 적용되는 공통 URL 스킴
  • 기존 이름은 유지하면서 객체들을 다른 장소로 옮기는 것을 가능하게 해주는 URN을 포함한 URL의 미래

2.1 인터넷의 리소스 탐색하기

  • ex) http://www.joes-hardware.com/seasonal/index-fall.html
  • http: URL의 scheme
    • 스킴은 웹 클라이언트가 리소스에 어떻게 접근하는지 알려준다.
    • 이 경우, URL이 HTTP 프로토콜을 사용한다.
  • www.joes-hardware.com: 서버의 위치
    • 웹 클라이언트가 리소스가 어디에 호스팅 되어 있는지 알려준다.
  • /seasonal/index-fall.html: 리소스의 경로
    • 서버에 존재하는 로컬 리소스들 중에서 요청받은 리소스가 무엇인지 알려준다.

 

URL은 HTTP 프로토콜이 아닌 다른 가용한 프로토콜을 사용할 수도 있다.

ex) mailto:president@withhouse.gov :: 이메일 주소

ex) ftp://ftp.lots-o-books.com/pub/complete-price-list.xls :: FTP 서버에 올라가 있는 파일

ex) rtsp://www.joes-hardware.com:554/interview/cto_video :: 비디오 서버에 호스팅 하고 있는 영화

 

이렇게 URL은 인터넷에 있는 어떤 리소스든지 가르킬 수 있다.

대부분의 URL은 ‘스킴://서버위치/경로' 구조로 이루어져 있다.

URL이 있기 전 암흑의 시대

웹과 URL이 있기 전에는 애플리케이션마다 달리 가지고 있는 분류 방식을 사용했다.

URL은 애플리케이션이 리소스에 접근할 수 있는 방법을 제공한다.

URL은 유저와 브라우저에게 정보 찾는데 필요한 모든 것을 제공하며, 원하는 리소스가 어디에 위치하고 어떻게 가져오는지 정의한다.

2.2 URL 문법

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

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

이 모든 컴포넌트를 가지는 URL 은 거의 없고, 가장 중요한 세 가지 컴포넌트는 스킴, 호스트, 경로이다.

스킴: 사용할 프로토콜

주어진 리소스에 어떻게 접근하는지 알려주는 중요한 정보이다.

URL 을 해석하는 애플리케이션이 어떤 프로토콜을 사용하여 리소스 요청하는지 알려준다.

알파벳으로 시작해야 하고 URL의 나머지 부분들과 첫 번째 (:)문자로 구분한다.

대소문자 구분하지 않는다.

호스트와 포트

애플리케이션이 리소스를 찾으려면, 호스팅하고 있는 장비와 서버가 어디에 있는지 알아야 한다.

호스트와 포트 컴포넌트가 그 정보를 제공한다.

 

ex) http://www.joes-hardware.com:80/index.html

ex) http://161.58.228.45:80/index.html

사용자 이름과 비밀번호

많은 서버가 자신이 가지고 있는 데이터에 접근을 허용하기 전에 사용자 이름과 비밀번호를 요구한다.

FTP 서버가 좋은 예이다.

  1. ftp://ftp.prep.ai.mit.edu/pub/gnu
    1. 이름, 비밀번호 없이 접근함.
    2. 애플리케이션이 이름, pw를 요구하는 스킴을 사용하면 기본 사용자 이름과 비밀번호 값을 넣을 것이다.
    3. 기본 사용자 이름 ‘anonymous’
    4. pw는 브라우저마다 가지고 있는 기본 값 사용한다.
      1. IE (’IEUser’), Chorme(’chrome@example.com’)
  2. ftp://anonymous@ftp.prep.ai.mit.edu/pub/gnu
    1. ‘@’ 는 URL로 부터 사용자 이름과 비밀번호 컴포넌트를 분리한다.
  3. http://joe:joespasswd@www.joes-hardware.com/sales_info.txt
    1. 사용자 이름과 비밀번호를 (:) 로 분리하여 모두 기술
    2. 사용자 이름: joe
    3. pw: joewpasswd

경로

리소스가 서버의 어디에 있는지 알려준다. 예와 같이 계층적 파일 시스템 경로와 유사한 구조를 가진다.

유닉스 파일 시스템의 파일 경로와 유사하다.

각 경로 조각은 자체만의 파라미터 컴포넌트를 가질 수 있다.

 

ex) http://www.joes-hardware.com:80/seasonal/index-fall.html

파라미터

URL을 사용하는 애플리케이션이 리소스에 접근하려면 프로토콜 파라미터가 필요하다. 프로토콜 파라미터가 없으면, 다른 한편에 있는 서버는 요청을 잘못 처리하거나 처리하지 않을 것이다.

 

ex) 바이너리와 텍스트 두 개의 포맷을 지원하는 FTP

바이너리 이미지가 텍스트 형식으로 전송되는 것을 원하지 않음.

 

URL의 파라미터 컴포넌트는 애플리케이션이 서버에 정확한 요청을 하기 위해 필요한 입력 파라미터를 받는데 사용한다.

<K, V> 쌍의 리스트로 URL 나머지 부분들로부터 ‘;’ 문자로 구분하여 URL 에 기술한다.

 

ex) ftp://prep.ai.mit.edu/pub/gnu;type=d

key: ‘type’, value: ‘d’ 인 type=d 라는 한 개의 파라미터를 전달

 

ex) http://www.joes-hardware.com/hammers;sale=false/index.html;graphics=true

위의 경로 컴포넌트에서 각 경로 조각은 자체만의 파라미터 컴포넌트를 가질 수 있다고 하였는데 이 예시가 적합하다. hammers가 sale=false, index.html이 graphics=true 라는 파라미터를 가진다.

질의 문자열

URL에서 (?)뒤에 있는 값들을 질의 컴포넌트라고 한다. URL의 질의 컴포넌트는 게이트웨이를 가리키는 URL의 경로 컴포넌트와 함께 전달하고 있다.

 

ex) http://www.joes-hardware.com/inventory-check?cgi?item=12731&color=red

item=12731 과 color=red 이라는 두 쌍의 <K, V> 질의 컴포넌트가 존재한다.

프래그먼트

리소스의 특정 부분을 가리킬 수 있도록, URL은 리소스 내의 조각을 가리킬 수 있는 프래그먼트 컴포넌트를 제공한다.

일반적으로 HTTP 서버는 객체 일부가 아닌 전체만 다루기에 클라이언트는 서버에 프래그먼트를 전달하지 않는다. 브라우저가 전체 리소스를 내려 받은 후, 프래그먼트를 사용해 보고자 하는 리소스의 일부를 보여주는 것이다.

 

ex. http://www.joes-hardware.com/tools.html#drills

drills 라는 프래그먼트는 /tools.html 웹페이지의 일부를 가리킨다.

2.3 단축 URL

웹 클라이언트는 몇몇 단축 URL을 인식하고 사용한다.

상대 URL은 리소스 안에 있는 리소스를 간결하게 기술하는데 사용할 수 있다.

상대 URL

URL은 상대 URL, 절대 URL 두 가지로 나뉜다.

절대 URL은 리소스에 접근하는데 필요한 모든 정보를 가지고 있다. 그와 달리 상대 URL은 모든 정보를 담고 있지는 않다.

상대 URL은 URL을 짧게 표기하는 방식이다.

상대 URL 문법에 따르면, HTML 작성자는 URL에 스킴과 호스트 그리고 다른 컴포넌트들을 모두 입력하지 않아도 된다. 그에 대한 정보는 컴포넌트가 포함된 리소스의 기저 URL (base URL)에서 알아낼 수 있다.

 

ex) http://www.joes-hardware.com/tools.html 문서에서의 <a href=”./hammers.html”>

이 경우 baseURL 문서의 URL을 기준으로 상대경로로 해석될 수 있다.

base URL: http://www.joes-hardware.com/tools.html 

 

책에서 상대 URL을 절대 URL 로 변환하는 알고리즘을 소개하는데 너무 과한거 같아 나중에 필요할때 찾아 보는게 좋겠다. 참조(RFC 2396)

URL 확장

어떤 브라우저는 URL 입력한 다음 자동으로 URL을 확장한다. 자동으로 확장되기 때문에 전체 URL을 입력하지 않아도 된다.

이러한 확장 기능은 두 가지로 나뉜다.

 

호스트 명 확장: ex) yahoo 를 입력하면 자동으로 www와 .com 을 붙여서 www.yahoo.com 을 만든다.

히스토리 확장: 사용자가 과거에 방문했던 URL의 기록을 바탕으로 만든다.

2.4 안전하지 않은 문자

URL에 이진 데이터나 알파벳 이외의 문자를 포함하려는 것을 알고 이스케이프 기능을 추가하여 안전하지 않은 문자를 안전한 문자로 인코딩 할 수 있게 하였다.

인코딩 체계

인코딩은 안전하지 않은 문자를 (%)로 시작해, 아스키코드로 표현되는 두 개의 16진수 숫자로 이루어진 이스케이프 문자로 바꾼다.

 

ex) (~): 아스키코드 126(0x7E) → https://www.kingsubin.tistory.com/%7Ejoe

문자 제한

몇몇 문자는 URL 내에서 특별한 의미로 예약되어 있다.

2.5 스킴의 바다

유명한 스킴들 요약

  • http: 기본 포트 80
  • https: http와 거의 같다. HTTP의 커넥션 양 끝단에서 SSL을 사용한다는 것 뿐. 기본 포트값 443
  • mailto: URL은 이메일 주소를 가르킨다.
  • ftp: File Transfer Protocol URL은 서버에 있는 파일을 내려받거나 올리고 콘텐츠 목록을 가져오는데 사용할 수 있다.
  • rtsp, rtspu: Real Time Streaming Protocol 을 통해서 읽을 수 있는 오디오 및 비디오와 같은 미디어 리소스 식별자이다. 끝에 u가 더 붙은 rtspu는 리소스를 읽기 위해 UDP 프로토콜이 사용됨을 말한다.
  • file: 주어진 호스트기기에서 바로 접근할 수 있는 파일들을 나타낸다.
  • news: 특정 문서나 뉴스 그룹에 접근하는데 사용한다.
  • telnet: 대화형 서비스에 접근하는데 사용한다.

2.6 미래

URL의 단점은 리소스의 위치가 변경되면 더 이상 사용할 수 없다는 것이다.

URN은 객체가 옮겨지더라도 항상 객체를 가리킬 수 있는 이름을 제공한다.

PURL을 사용하면 URL로 URN의 기능을 제공할 수 있다. PURL은 리소스의 실제 URL 목록을 관리하고 추적하는 리소스 위치 중개 서버를 두고 해당 리소스를 우회적으로 제공한다. (참조 https://purl.archive.org/help)

' > misc' 카테고리의 다른 글

처리율 제한 장치의 설계  (3) 2022.06.19
3장. HTTP 메시지  (0) 2022.05.02
1장. HTTP 개관  (0) 2022.04.24
HTTP 완벽 가이드 책 샀다.  (2) 2022.02.10
프로그래밍 면접 이렇게 준비한다 책 샀다.  (0) 2021.08.29