[HTTP] 2장: URL과 리소스

서정범·2023년 4월 17일
0

HTTP

목록 보기
4/13

URL의 형태

앞서 1장에서 URL이 무엇인지는 살펴 보았습니다.

URL이 어떠한 형태로 되어 있는지 살펴봅시다.

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

이와 같은 URL을 불러오고 싶다고 하자.

  • URL의 첫 부분인 httpURL의 스킴입니다. 스킴은 웹 클라이언트가 리소스에 어떻게 접근하는지 알려줍니다.
  • URL의 두번째 부분인 www.joes-hardware.com서버의 위치입니다. 웹 클라이언트가 리소스가 어디에 호스팅되어 있는지 알려줍니다.
  • URL의 세번째 부분인 /seasonal/index.fall.html리소스의 경로입니다. 경로는 서버에 존재하는 로컬 리소스들 중에서 요청받은 리소스가 무엇인지 알려줍니다.

URL의 문법

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

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

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

컴포넌트설명기본값
스킴몇몇 스킴은 리소스에 접근을 하기 위해 사용자 이름을 필요없음
사용자 이름몇몇 스킴은 리소스에 접근을 하기 위해 사용자 이름을 필요로 함.anonymous
비밀번호사용자의 비밀번호를 가르킴.<이메일 주소>
호스트리소스를 호스팅하는 서버의 호스트명이나 IP주소없음
포트리소스를 호스팅하는 서버가 열어놓은 포트 번호.스킴에 따라 다름
경로이전 컴포넌트와 빗금(/)으로 구분되어 있으며, 서버 내 리소스가 서버 어디에 있는지를 가르킨다.없음
파라미터특정 스킴들에서 입력 파라미터를 기술하는 용도로 사용없음
질의스킴에서 애플리케이션에 파라미터를 전달하는데 사용, URL의 끝에 "?"로 구분없음
프래그먼트리소스의 조각이나 일부분을 가르키는 이름, 클라이언트에서만 사용, URL의 끝에서 "#"문자로 구분없음

프래그먼트의 경우, 일반적으로 HTTP 서버는 객체 일부가 아닌 전체만 다루기 때문에, 클라이언트는 서버에 프래그먼트를 전달하지는 않습니다.

대신, 브라우저는 서버로부터 전체 리소스를 내려받은 후, 프래그먼트를 사용하여 당신이 보고자 하는 리소스의 일부를 보여줍니다.

단축 URL

웹 클라이언트는 몇몇 단축 URL을 사용합니다.

URL은 두 가지로 나뉩니다.

  1. 상대 URL
  2. 절대 URL

상대 URL은 기저(base)라고 하는 URL(현재 페이지)을 이용하여 표기합니다.

예를 들어, 현재 페이지가 http://www.joes-hardware.com/tools.html이라고 해봅시다.

여기서 http://www.joes-hardware.com/tools.html/hammers.html로 이동하고 싶을 때 우리는 위의 기저 URL을 이용하여 ./hammers.html만 입력해도 이동하려고 했던 URL로 이동을 할 수 있습니다. 그리고 우리는 위의 전체 URL을 절대 URL이라고 부릅니다.

상대 URL은 프래그먼트이거나 URL 일부

URL 확장

URL '확장' 기능은 두 가지로 나뉩니다.

  • 호스트 명 확장: 호스트명 확장 기능을 지원하는 브라우저는 단순한 휴리스틱만을사용해서 입력한 호스트 명을 전체 호스트 명으로 확장할 수 있습니다.
  • 히스토리 확장: 사용자가 URL을 입력하는 시간을 줄이고자, 브라우저가 사용하는 또 다른 기술은 과거에 사용자가 방문헀던 URL의 기록을 저장해 놓는 것입니다.

예를 들어, 호스트 명 확장의 경우 'yahoo'를 입력하면, 브라우저는 호스트명에 자동으로
'www.'와 '.com'을 붙여서 'www.yahoo.com'을 만듭니다.

정리

현재 URI는 대부분이 URL로 되어 있습니다.

하지만, URL은 완벽하지 않습니다.

URL은 주소이지 실제 이름이 아니기 때문에, 특정 시점에 어떤 것이 위치한 곳을 알려준다는 것을 뜻합니다.

그래서 만약, 리소스가 옮겨지면 URL을 더는 사용할 수 없다는 것입니다. 그리고 그 시점에 기존 URL이 가리키고 있던 객체를 찾을 방법이 없어집니다.

URN(uniform resource names)은 객체가 옮겨지더라도(웹 서버 내에서나 웹 서버 간 모두) 항상 객체를 가르킬 수 있는 이름을 제공하기 때문에, URN은 새로운 표준 작업에 착수하고 있습니다.

지속 통합 자원 지시자(Persistent uniform resource locators, PURL)을 사용하면 URL로 URN의 기능을 제공할 수 있습니다.'

하지만, 아직까지 채택되지는 않았습니다.

그 이유는 다음과 같습니다.

  1. 표준화는 매우 중요한 작업인 만큼 느리게 진행될 때도 있습니다. (많은 변화 요구)
  2. 여러 HTTP 애플리케이션을 수정하기 위한 벤더들과의 합의도 필요

Reference

profile
개발정리블로그

0개의 댓글