[2장] URL과 리소스

janjanee·2022년 8월 1일
0
post-thumbnail

2020.12.13 작성글 이전

2장 URL과 리소스

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

URL은 브라우저가 정보를 찾는데 필요한 리소스의 위치를 가리키며, URL을 이용해 사람과 애플리케이션이 리소스를 찾고 사용하며 공유한다.

URL은 URI의 부분집합이다. URI는 URL과 URN으로 구성된 종합적인 개념이다.

http://www.google.com/index.html

위의 URL은 아래와 같이 세 부분으로 나뉜다. (1장에서도 언급됨)

  1. [http://\] - URL의 스킴, 스킴은 웹 클라이언트가 리소스에 어떻게 접근하는지 알려준다. HTTP 프로토콜을 사용한다.
  2. [www.google.com] - 서버의 위치다. 웹 클라이언트가 리소스가 어디에 호스팅 되어있는지 알려준다.
  3. [/index.html] - /index.html은 리소스의 경로다.

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

  • abc@google.com
  • ftp://ftp.books.com/pub/test.xls
  • rtsp://www.google.com/image/5

이메일, 파일, 스트리밍 등 다양한 프로토콜을 이용하여 인터넷에 있는 어떤 리소스든지 가리킬 수 있다.

2.2 URL 문법

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

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

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

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

컴포넌트설명기본값
스킴리소스를 가져올 때 사용하는 프로토콜 정보없음
사용자 이름몇몇 스킴은 리소스에 접근하기 위해 사용자 이름을 필요로 함anonymous
비밀번호사용자의 비밀번호를 가리키며, 사용자 이름에 콜론(:)으로 이어서 기술한다<이메일 주소>
호스트리소스를 호스팅하는 서버의 호스트 명이나 IP없음
포트리소스를 호스팅하는 서버가 열어놓은 포트번호스킴에 따라 다름
경로이전 컴포넌트와 빗금(/)으로 구분되어 있으며, 서버 내 리소스가 어디에 있는지를 가리킨다. 경로 컴포넌트의 문법은 서버와 스킴에 따라 다르다없음
파라미터특정 스킴들에서 입력 파라미터를 기술하는 용도로 사용한다. 이름/값을 쌍으로 가진다.없음
질의스킴에서 애플리케이션(데이터베이스, 게시판, 검색엔진, 기타 인터넷 게이트)에 파라미터를 전달하는데 쓰인다.없음
프래그먼트리소스의 조각이나 일부분을 가리키는 이름이다. URL이 특정 객체를 가리킬 경우에프래그먼트 필드는 서버에 전달되지 않는다.URL의 끝에서 "#" 문자로 구분한다.없음

2.2.1 스킴: 사용할 프로토콜

스킴은 주어진 리소스에 어떻게 접근하는지 알려주는 중요한 정보다. 스킴명은 대소문자를 가리지 않는다.

2.2.2 호스트와 포트

리소스를 호스팅하고 있는 장비와 그 장비 내에서 리소스에 접근할 수 있는 서버가 어디에 있는지 알아야 한다. URL의 호스트와 포트 컴포넌트는 그 두 가지 정보를 제공한다.

2.2.3 사용자 이름과 비밀번호

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

ftp://ftp.prep.ai.mit.edu/pub/gnu
ftp://anonymous@ftp.prep.ai.mit.edu/pub/gnu
ftp://anonymous:my_passwd@ftp.prep.ai.mit.edu/pub/gnu

사용자 이름과 비밀번호를 기술하지 않고 FTP URL에 접근하면, 기본 사용자 이름 값으로 'anonymous' 비밀번호는 브라우저마다 가지고 있는 기본값을 사용한다.

2.2.4 경로

URL의 경로 컴포넌트는 리소스가 서버의 어디에 있는지 알려준다. URL의 경로는 유닉스 파일 시스템의 파일 경로와 유사하다.

2.2.5 파라미터

URL의 파라미터 컴포넌트는, 애플리케이션이 서버에 정확한 요청을 하기 위해 필요한 입력 파라미터를 받는데 사용한다. 이름/값 쌍의 리스트로 URL 나머지 부분들로부터 ';' 문자로 구분하여 URL에 기술한다.

http://www.google.com/image;name=cute

이 경우 이름은 'name'이고, 값은 'cute'인 name=cute라는 단 한 개의 파라미터를 전달한다.

HTTP URL에서 경로 컴포넌트는 경로조각으로 나눌 수 있다. 각 조각은 자체 파라미터를 가질 수 있다.

http://www.google.com/hammers;sale=false/inde.html;graphics=true

위 URL에는 hammers와 index.html 이라는 두 개의 경로조각이 있다.

hammers 경로 조각은 값이 false인 sale 파라미터를 가진다.ㅍ index.html 경로조각은 값이 true인 graphics란 파라미터를 가진다.

2.2.6 질의 문자열

데이터베이스 같은 서비스들은 요청받을 리소스 형식의 범위를 좁히기 위해서 질문이나 질의를 받을 수 있다. URL의 질의 컴포넌트는 게이트웨이를 가리키는 URL의 경로 컴포넌트와 함께 전달하고 있다. 게이트웨이는, 다른 애플리케이션에 접근하려고 할 때 거치는 통로라고 할 수 있다.

많은 게이트웨이가 '&'로 나뉘는 'key=value' 형식의 질의 문자열을 원한다.

2.2.7 프래그먼트

HTML 같은 리소스 형식들은 본래의 수준보다 더 작게 나뉠 수 있다. 리소스의 특정 부분을 가리킬 수 있도록, URL은 리소스 내의 조각을 가리킬 수 있는 프래그먼트 컴포넌트를 제공한다.

http://google.com/tools.html/#drills

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

2.3 단축 URL

2.3.1 상대 URL

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

  • 절대 URL : 리소스에 접근하는데 필요한 모든 정보를 가지고 있다.
  • 상대 URL : URL을 짧게 표기하는 방식이다. 기저(base)라고 하는 다른 URL을 사용한다.
<a href="./hammers.html">hammers</a>

위의 소스는 http://google.com/tools.html가 가리키는 리소스인 HTML 문서의 일부분이다. ./hammers.html URI를 가리키는 하이퍼링크가 있다.

구글 웹 서버의 /tools.html리소스를 기준으로 상대경로로 명시되어 있는 것이다.

상대 URL 문법에 따르면, URL의 스킴, 호스트 그리고 다른 컴포넌트 정보들은 해당 컴포넌트가 포함된 리소스의 기저 URL에서 알아낼 수 있다.

http://google.com/tools.html

이 URL을 기저 URL로 사용하여, 스킴, 호스트를 추측할 수 있다.

http 스킴과 google.com 호스트를 알아내어 다음과 같은 절대 URL을 알아낸다.

http://google.com/hammers.html

어떤 리소스들은 기저 URL을 명확하게 기술하기도 한다. -> HTML 문서에서는 그 안에 있는 모든 상대 URL을 변경하기 위해서 기저 URL을 가리키는 **** html 태그를 기술할 수 있다.

2.3.2 URL 확장

URL 확장 기능은 두 가지로 나뉜다.

  • 호스트 명 확장
    • google을 입력하면, 자동으로 'www.'와 '.com'을 붙여서 'www.google.com'을 만든다.
  • 히스토리 확장
    • 과거에 사용자가 방문했던 URL의 기록을 저장한다.

2.4 안전하지 않은 문자

안전한 전송이란, 정보가 유실될 위험 없이 URL을 전송할 수 있다는 것을 의미한다. URL은 상대적으로작고 일반적으로 안전한 알파벳 문자만 포함하도록 허락한다.

사람들이 URL에 이진 데이터나 일반적으로 안전한 알파벳 외의 문자도 포함하려 할 때가 있다는 것을 알았다. 그래서 이스케이프라는 기능을 추가하여, 안전하지 않은 문자를 안전한 문자로 인코딩할 수 있게 한다.

2.4.1 URL 문자 집합

컴퓨터 시스템의 기본 문자 집합은 보통 영어 중심으로 설정되어있다. 역사적으로 많은 컴퓨터 애플리케이션이 US-ASCII 문자 집합을 사용해왔다. US-ASCII는 만들어진 지 오래된 문자 집합이라, 적은수의 문자만을 포함한다.

전 세계 유럽 언어나 수백 가지의 비 라틴계 언어들에 존재하는 변형된 문자는 지원하지 않는다. 또한 URL에 특정 이진 데이터를 포함해야 하는 경우도 있다.

이런 것을 지원하기 위해, URL에 이스케이프 문자열을 쓸 수 있게 설계하였다.

2.4.2 인코딩 체계

URL에 있는 안전하지 않은 문자들을 표현할 수 있는 인코딩 방식이 고안되었다. 인코딩은 안전하지 않은 문자를 퍼센티지 기호(%)로 시작해, ASCII 코드로 표현되는 두 개의 16진수 숫자로 이루어진 '이스케이프' 문자로 바꾼다.

http://www.google.com/%7Ehello      ->      %7E(~)
http://www.google.com/more%20tools.html     ->      %20(빈 문자)
http://www.google.com/100%25satisfaction.html       ->      %25(%)

2.4.3 문자 제한

URL에서 예약된 문자들을 본래의 목적이 아닌 다른 용도로 사용하려면, 그 전에 반드시 인코딩해야 하는 문자들은 다음과 같다.

문자선점 및 제한
%인코딩된 문자에 사용할 이스케이프 토큰으로 선점
/경로 컴포넌트에 있는 경로 세그먼트를 나누는 용도로 선점
.경로 컴포넌트에서 선점
..경로 컴포넌트에서 선점
#프래그먼트의 구획 문자로 선점
?질의 문자열의 구획 문자로 선점
;파라미터의 구획 문자로 선점
:스킴, 사용자 이름/비밀번호, 호스트/포트의 구획 문자로 선점
$ +선점
@ & =특정 스킴에서 의미가 있기 때문에 선점
{} | ~ [] `게이트웨이와 같은 여러 전송 에이전트에서 불안전하게 다루기 때문에 제한됨
<> "안전하지 않음. URL 범위 밖에서 역할이 있는 문자이기 때문에 반드시 인코딩 필요
0x00-0x1F, 0x7F제한됨. 이 16진수 범위에 속하는 문자들은 인쇄되지 않은 US-ASCII 문자
> 0x7F제한됨. 이 16진수 범위에 속하는 문자들은 7비트 US-ASCII 문자가 아니다.

2.4.4 좀 더 알아보기

입력받은 URL에서 어떤 문자를 인코딩해야 하는지 결정하는 데는 브라우저와 같이 사용자로부터 최초로 URL을 입력받는 애플리케이션에서 하는 것이 가장 적절하다.

URL을 해석하는 애플리케이션은 그것을 처리하기 전에 URL을 디코드 해야한다.

2.5 스킴의 바다

웹에서 쓰이는 일반 스킴들의 포맷에 대해 알아본다.

스킴설명
http일반 URL 포맷을 지키는 하이퍼텍스트 전송 프로토콜(Hypertext Transfer Protocol) 스킴. 포트값이 생략되어있으면 기본값은 80이다. (http://www.google.com)
httpshttp 스킴과 거의 같다. 차이점은 HTTP의 커넥션의 양 끝단에서 암호화하기 위해 넷스케이프에서 개발한 보안 소켓 계층(Secure Sockets Layer, SSL)을 사용한다. 기본 포트값은 443이다. (https://www.google.com)
mailto이메일 주소를 가리킨다. (abc@gmail.com\)
ftp파일 전송 프로토콜(File Transfer Protocol)은 FTP 서버에 있는 파일을 내려 받거나 올리고, FTP 서버의 디렉터리에 있는 콘텐츠 목록을 가져온다. (ftp://anonymous:joe%40joes-hardware.com@prep.ai.mit.edu:21/pub/gnu/)
rtsp, rtspu실시간 스트리밍 프로토콜(Real Time Streaming Protocol)을 통해서 읽을 수 있는 오디오 및 비디오와 같은 미디어 리소스 식별자다. rtspu의 마지막 'u'는 UDP 프로토콜 사용됨 (rstp://www.joes-hardware.com:554/interview/cto_video)
file주로 호스트 기기(로컬 디스크, 네트워크 파일 시스템 혹은 기타 파일 공유시스템)에서 바로 접근할 수 있는 파일을 나타낸다. (file://OFFICE_FS/policies/hello.doc)
news현재 설명되어있는 뉴스 서버 정보를 사용하여 어떤 서버로부터 뉴스를 가져올지 결정.(news:rec.arts.startrek)
telnet대화형 서비스에 접근하는데 사용. 리소스라고 할 수 있는 대화형 애플리케이션은 telnet 프로토콜을 통해 접근 가능하다. (telnet://slurp:webhound@joes-hardware.com:23/)
profile
얍얍 개발 펀치

0개의 댓글