URL과 리소스

Taemin Jang·2024년 8월 21일
0

HTTP 완벽 가이드

목록 보기
1/1

다음은 HTTP 완벽 가이드 책을 읽고 정리한 내용입니다.

이번에 학습할 내용

  • URL 문법, 여러 URL 컴포넌트가 어떤 의미를 가지고 무엇을 수행하는가
  • 상대 URL과 확장 URL 같은 단축 URL
  • URL의 인코딩과 문자 규칙

URL

URL은 통합 자원 식별자(Uniform Resource Identifier) 혹은 URI라고 불리는 부분집합이다.

URI는 URL과 URN으로 구성된 종합적인 개념으로, URN은 이름만으로 리소스를 식별하며, URL은 위치로 리소스를 식별한다.

대부분 URL과 URI를 하나로 취급해서 설명한다.

URL 문법

대부분의 URL Scheme 문법은 일반적으로 9개 부분으로 나뉜다.
<스킴>://<사용자 이름>:<비밀번호>@<호스트>:<포트>/<경로>;<파라미터>?<질의>#<프래그먼트>

위의 문법을 모두 가지는 URL은 거의 없고, 스킴, 호스트, 경로가 가장 중요하다.

컴포넌트설명
스킴리소스를 가져오려면 어떤 프로토콜을 사용하여 서버에 접근해야하는지 가리킴
사용자 이름몇몇 스킴은 리소스에 접근을 하기 위해 사용자 이름이 필요함
비밀번호사용자의 비밀번호를 가리키며, 사용자 이름에 콜론으로 이어서 기술
호스트리소스를 호스팅하는 서버의 호스트 명이나 IP 주소
포트리소스를 호스팅하는 서버가 열어놓은 포트번호 (HTTP 기본 포트 번호 80)
경로서버 내 리소스가 서버 어디에 있는지를 가리킴, 서버와 스킴에 따라 문법이 다름
파라미터특정 스킴들에서 입력 파라미터를 기술하는 용도
질의스킴에서 애플리케이션에 파라미터를 전달하는데 쓰임
프래그먼트리소스의 조각이나 일부분을 가리키는 이름, 서버에 전달되지 않음

사용자 이름과 비밀번호

FTP 서버와 같이 데이터에 접근하기 위해서는 사용자 이름과 비밀번호를 URL에 전달해야한다.

ftp://ftp.prep.ai.mit.edu/pub/gnu
ftp://anonymous:my_passwd@ftp.prep.ai.mit.edu/pub/gnu
ftp://joe:joespasswd@www.joes-hardware.com/sales_info.txt
위에 첫번째 예시처럼 사용자 이름이나 비밀번호 없이 접근할 수 있다.

근데 만약 사용자 이름과 비밀번호를 요구하지만, 입력하지 않은 경우 기본 값으로 사용자 이름은 anonymous이고, 비밀번호는 브라우저마다 다르다.

사용자 이름과 비밀번호를 기술한 경우는 3번째 예시처럼 사용자 이름은 joe이고, 비밀번호는 joespasswd가 된다.

파라미터

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

이름/값 쌍의 리스트로 URL 나머지에 ; 문자로 구분하여 기술한다.

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

이 예시의 경우 이름은 type이고, 값은 d인 한 개의 파라미터를 전달한다.

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

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

hammers 경로 조각은 값이 false인 sale이라는 파라미터를 가지고, index.html 경로 조각은 값이 true인 graphics 파라미터를 가지게 된다.

프래그먼트

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

예를 들어 URL은 HTML 문서에 있는 특정 이미지나, 일부분을 가리킬 수 있다.

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

위 예시는 drills라는 프래그먼트로 해당 웹 서버에 위치한 /tools.html 웹 페이지의 일부를 가리킨다.

프래그먼트는 클라이언트에서만 다루고, 서버에는 전달하지 않는다.

단축 URL

상대 URL

URL은 상대 URL과 절대 URL 두 가지로 나뉜다. (상대 경로, 절대 경로)

지금까지의 예시는 절대 URL이며, 절대 URL은 리소스에 접근하는데 필요한 모든 정보를 가지고 있다.

상대 URL은 모든 정보를 담고 있지 않으며, URL을 짧게 표기하는 방식이다.

http://www.joes-hardware.com/tools.html - 현재 URL (기저 URL)
http://www.joes-hardware.com/hammers.html
2개의 URL이 있고, 현재 URL은 tools.html이다.

해당 HTML 파일안에 ./hammers.html을 가리키는 하이퍼링크가 이런식으로 작성되어 있다면, 이는 문서의 URL을 기준으로 상대 URL로 작성된 것이다.

URL 확장

어떤 브라우저들은 URL을 입력한 다음이나 입력하는 도중에 자동으로 URL이 확장된다. (자동완성)

자동으로 URL이 확장되기 때문에 URL 전체를 입력하지 않아도 되어 빠르고 편리하게 도와준다.

이러한 확장은 2가지 기능으로 나뉘어진다.

  • 호스트명 확장
    호스트명 확장 기능을 지원하는 브라우저는 단순한 휴리스틱만 사용해서 확장할 수 있다.
    yahoo를 입력하면, 브라우저는 호스트 명에 자동으로 www..com을 붙여서 www.yahoo.com을 만든다.
  • 히스토리 확장
    과거에 사용자가 방문했던 URL의 기록을 저장해 놓았다가, URL을 입력하면 입력된 URL의 앞 글자들을 포함하는 완결된 형태의 URL들을 선택하게 도와준다.
    http://www.joes-처럼 이전에 방문했던 URL의 시작 부분을 입력하면, 브라우저는 http://www.joes-hardware.com을 보여주게 된다.

URL의 인코딩 규칙

URL 문자 집합

컴퓨터 시스템의 기본 문자 집합은 보통 영어 중심으로 설정되어 US-ASCII 문자 집합을 사용해왔다.

하지만 전 세계 사람들이 사용하다보니, 각 나라의 언어의 문자들은 US-ASCII가 지원하지 않는다.

따라서 이러한 문자들을 지원하기 위해, URL 설계자들은 URL에 이스케이프 문자열을 쓸 수 있게하여 US-ASCII에서 지원하지 않는 문자들을 인코딩할 수 있게 했다.

지원되지 않는 문자에는 공백도 포함된다. 따라서 공백은 %20으로 처리된다.

예약어

몇몇 문자는 URL 내에서 예약어로 사용된다.

따라서 아래 표에 있는 예약어를 사용하기 위해서는 반드시 사용전에 인코딩해야 한다.

문자선점 및 제한
%인코딩된 문자에 사용할 이스케이프 토큰
/경로에 있는 경로 세그먼트를 나누는 용도
.경로에서 사용
..경로에서 사용
#프래그먼트의 문자
?질의 문자열의 문자
;파라미터의 문자
:스킴, 사용자 이름/비밀번호, 호스트/포트의 문자
$ , +선점
@ & =특정 스킴에서 특별한 의미로 사용
{}~[]`게이트웨이와 같은 여러 전송 에이전트에서 불안전하게 다루기에 제한
<>"안전하지 않음, 반드시 인코딩해서 사용해야하는 문자
profile
하루하루 공부한 내용 기록하기

0개의 댓글