독서 리마인더/HTTP 완벽가이드

[HTTP 완벽가이드] 2장 URL과 리소스

hwijin97 2021. 4. 29. 20:09

2장 URL과 리소스

이 장에서 다음과 같은 것들을 다룬다.

URL의 문법, 여러 URL 컴포넌트의 의미와 무엇을 수행하는지.

여러 웹 클라이언트가 지원하는 상대 URL, 확장 URL

URL의 인코딩과 문자규칙, 공통 URL 스킴

콘텐츠의 자유로운 장소이동을 가능하게하는 URN을 포함한 URL의 미래

 

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

https://www.joes-hardware.com/seasonalindex-fail.html 과같은 URL을 불러오고 싶다고 해보자.

- HTTP는 URL의 스킴 부분이고 리소스에 접근하는 방법을 나타낸다.

- 그뒤로 이어지는 부분은 서버의 위치이고, 리소스가 어디에 호스팅 되어있는지 알려준다.

- 마지막 부분은 리소스의 경로이고 서버에 존재하는 로컬 리소스들 중 어떤 리소스가 요청받았는지 알려준다.

대부분의 URL은 스킴://서버위치/경로 의 형태로 작성된다.

 

    2.2 URL 문법

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

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

 

1. 스킴 : 사용할 프로토콜

스킴은 리소스에 어떻게 접근할 것인지를 나타낸다.

2. 호스트와 포트

인터넷의 리소스를 찾기위해선 서버가 어디있는지 알아야하고, 호스트와 포트가 그것을 제공한다.

내부적으로 TCP 프로토콜 기본포트는 80이다.

3. 사용자 이름과 비밀번호

보통 브라우저마다 기본값을 사용하고, 데이터 접근을 위해 이름과 비밀번호를 요구할때, 사용된다.

4. 경로

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

경로 컴포넌트는 / 문자를 기준으로 경로조각이 나뉘고, 자체만의 파라미터 컴포넌트를 가질 수 있다.

5. 파라미터

리소스를 찾기 위해서, 호스트 및 경로정보만으로는 부족하다.

하나의 예로 바이너리, 텍스트 포맷을 지원하는 FTP의 경우, 바이너리 이미지가 텍스트 형식으로 전송되는 것을 원하지 않기때문에, 이를 지정해준다. 이름=값의 리스트로 지정되고 ; 문자로 구분된다.

경로 컴포넌트 별로 파라미터를 가질 수 있다.

6. 질의 문자열

요청받을 리소스의 범위를 좁히기 위해서, 질문이나 질의를 받는다. 사용불가한 특정 문자들을 제외하면 포맷제약사항은 없고, 편의상 많은 게이트웨이가 & 로나뉜 이름/값 형식을 사용한다. ? 문자 이후에 시작된다.

7. 프래그먼트

용량이 큰 리소스의 경우, 특정 리소스 조각을 가르킬 수 있게, 프래그먼트 컴포넌트를 제공한다. URL의 # 문자 이후에 등장한다.

하지만 서버는 리소스 전체를 반환하고, 클라이언트에서 프래그먼트에 맞는 부분을 보여준다.

 

    2.3 단축 URL

1. 상대 URL

부분적인 정보를 담는 상대 URL은 프래그먼트 이거나 URL의 일부로, HTML 문서의 하이퍼링크 등에 사용된다.

기저 URL을 통해 부족한 정보를 추측한다.

2. URL 확장

호스트 명 EX) YAHOO 만 입력하면 나머지 정보를 확장하거나, 과거 방문했던 URL의 기록을 저장하여 자동완성 하는 기능이 있다.

하지만 프락시와 같은 HTTP 앱에 문제가 발생가능하다.

 

    2.4 안전하지 않은 문자

URL은 상대적으로 작고 일반적으로 안전한 알파벳 문자만 포함하도록 한다. 이는 모든 인터넷 프로토콜로 URL이 전송되기를 바랐고, 가독성도 있기를 바랬다. 그래도 알파벳 외의 문자도 포함하기 위해서 이스케이프 기능을 추가했다.

 

1. URL 문자 집합

컴퓨터 시스템의 기본 문자 집합은 보통 US-ASCII 7비트 문자 집합을 사용한다. 이 문자 집합은 나타낼수 있는 문자가 매우 적어 URL문자에 이스케이프 문자를 추가한다.

2. 인코딩 체계

안전하지 않은 문자를 URL에 포함시키기위해 %문자로 시작해 16진수 숫자로 이루어진 이스케이프 문자로 바꾼다.

EX) banana-cafe.tistory.com/manage/newpost/?type=post&returnURL=%2Fmanage%2Fposts%2F#

3. 문자 제한

% : 인코딩 이스케이프 토큰

/ : 경로 컴포넌트의 경로 세그먼트를 나누는 용도

. : 경로 컴포넌트

.. : 경로 컴포넌트

# : 프래그먼트 구획문자

? : 질의 문자열 구획문자

; : 파라미터의 구획문자

: : 스킴, 사용자이름/비밀번호, 호스트/포트의 구획문자

$, + : 선점

@ & = : 특정 스킴에서의 특별한 의미를 가짐

{ } | \ ~ [] ' :  게이트웨이와 같은 여러 전송 에이전트에서 불완전하게 다뤄 제한됨.

< > " : URL 범위 밖에서 역할이 있기때문에 반드시 인코딩되어야 한다.

 

    2.5 스킴의 바다

http : 사용자 이름이나 비밀번호가 없다는 것을 제외하고는, 일반 URL 포멧을 지키는 파이퍼텍스트 프로토콜이다.

https : HTTP와 거의 비슷하고, HTTP의 커넥션 양끝에서 암호화하기위해 SSL(secure socket layer)을 사용하는 것만 다르다. 기본포트값은 443이다.

mailto : 이메일 주소를 가르킨다. RFC 822에 문법이 기술되어있다.

ftp : 파일 전송 프로토콜(FILE TRANSFER PROTOCOL)은 서버에 있는 파일을 내려 받거나 올리고, 콘텐츠 목록을 가져오는데 사용한다.

ftp://<username>:<pw>@<host>:<port>//<path>;<params> 의 형식이다.

rtsp, rtspu : 실시간 스트리밍 프로토콜을 통해서 읽을 수 있는 오디오 및 비디오와 같은 미디어 리소스 식별자이다.

file : 주어진 호스트 기기에서 바로 접근할 수 있는 파일들을 나타낸다. 호스트가 생략되었다면 기기의 로컬 호스트가 기본값이다.

news : 특정 문서나 뉴스 그룹에 접근하는데 사용된다.

telnet : 대화형 서비스에 접근하는데 사용 한다.

 

    2.6 미래

url의 단점은 리소스가 옮겨지면 같은 URL을 더는 사용할 수 없다는 점이다. 따라서 URN의 표준 작업을 착수했고,

PURL(persistent uniform resource locators)을 통해 기존 url로 urn의 기능을 제공하도록 했다.

참고 : http://purl.oclc.org