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

이 글은 HTTP 완벽 가이드의 책 내용을 정리한 글입니다.

URL은 인터넷의 리소스를 가리키는 표준 이름이다. URL은 전자정보 일부를 가리키고 그것이 어디에 있고 어떻게 접근할 수 있는지 알려준다.

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

  • URL은 브라우저가 정보를 찾는데 필요한 리소스의 위치를 가리킨다.
  • URL을 입력하면 브라우저는 사용자가 원하는 리소스를 얻기 위해 적절한 프로토콜을 사용하여 메시지를 전송한다.
  • URL은 URI의 부분 집합이다.
  • URL을 사용하면 리소스를 일관된 방식으로 지칭할 수 있다. 대부분의 URL은 동일하게 “스킴://서버위치/경로” 구조로 이루어져 있다.
  • URL은 정보를 찾는데 필요한 모든 것을 제공한다. (리소스가 어디에 위치하는지 어떻게 가져오는지 정의)

2.2 URL 문법

  • URL 문법은 스킴에 따라 달라진다. 하지만 대부분의 URL은 일반 URL 문법을 따르며, 서로 다른 URL 스킴도 형태와 문법 면에서 매우 유사하다.
  • <스킴>://<사용자 이름>:<비밀번호>@<호스트>:<포트>/<경로>;<파라미터>?<질의>#<프래그먼트>

스킴

  • 어떤 프로토콜을 사용해야하는지 정의
  • 대소문자를 구분하지 않음

사용자 이름 / 비밀번호

  • 몇몇 스킴은 리소스에 접근하기 위해 사용자 이름과 패스워드가 필요함
  • 사용자 이름과 비밀번호를 요구하는 URL 스킴을 사용한다면, 그 값들이 삽입되어 있지 않을 경우 기본 사용자 이름과 비밀 번호 값을 넣어준다.
  • @ 문자는 URL로부터 사용자 이름과 비밀번호 컴포넌트를 분리한다.

호스트

  • 리소스를 호스팅하는 서버의 호스트명이나 IP 주소

포트

  • 리소스를 호스팅하는 서버가 열어놓은 포트번호.
  • 많은 스킴이 기본 포트를 가지고 있음

경로

  • 이전 컴포넌트와 빗금으로 구분되어 있으며, 서버 내 리소스가 서버 어디에 있는지를 가리킨다.
  • 계층적 파일 시스템 경로와 유사한 구조를 가진다.
  • ”/” 문자를 기준으로 경로조각으로 나뉜다. 각 경로조각은 자체만의 파라미터 컴포넌트를 가질 수 있다.

파라미터

  • 특정 스킴들에서 입력 파라미터를 기술하는 용도로 사용한다. 파라미터는 이름/값을 쌍으로 가진다.
  • 애플리케이션이 서버에 정확한 요청을 하기 위해 필요한 입력 파라미터를 받는데 사용한다.
  • 이름/값 쌍의 리스트로 URL 나머지 부분들로부터 “;” 문자로 구분하여 URL에 기술한다.
  • 예) ftp://prep.ai.mit.edu/pub/gnu;type=d

질의

  • 스킴에서 애플리케이션에 파라미터를 전달하느데 쓰인다.
  • URL의 끝에 “?”로 구분한다.
  • 요청받을 리소스 형식의 범위를 좁히기 위해서 사용
  • 포맷에 제약사항은 없지만 대부분 &로 나뉜 “이름=값” 쌍 형식의 질의 문자열을 사용한다.

프래그먼트

  • 리소스의 조각이나 일부분을 가리키는 이름이다.
  • 프래그먼트 필드는 서버에 전달되지 않는다. 클라이언트에서만 사용된다.
  • ”#” 문자로 구분한다.
  • 브라우저는 서버로부터 전체 리소스를 내려받은후, 프래그먼트를 사용하여 사용자가 보고자하는 리소스의 일부를 보여준다.

2.3 단축 URL

상대 URL

  • 절대 URL : 리소스에 접근하는데 필요한 모든 정보를 가지고 있다.
  • 상대 URL : 모든 정보를 담고 있지 않다. 상대 URL로 리소스에 접근하기 위해서는, base URL을 사용해야한다.
  • 상대 URL은 URL에 스킴과 포스트 그리고 다른 컴포넌트들을 모두 입력하지 않아도 된다. 그 정보는 컴포넌트가 포함된 리소스의 base URL에서 알아낼 수 있다.
  • 상대 URL은 프래그먼트이거나 URL 일부다. URL을 처리하는 브라우저 같은 애플리케이션은 상대 URL과 절대 URL 간에 상호 변환을 할 수 있어야한다.

Base URL

  • base URL은 상대 URL의 기준이 된다. 가져오는 몇 가지 방법이 있다.
    • 리소스에 명시적으로 제공 : HTML의 <BASE> 태그
    • 리소스를 포함하고 있는 base URL : 리소스의 URL을 기저 URL로 쓸 수 있음
  • Base URL과 상대 URL을 컴포넌트로 분해하고, 알고리즘을 사용하여 변환 과정을 거쳐서 절대 URL로 합친다.

2.4 안전하지 않은 문자

  • URL은 일반적으로 안전한 알파벳 문자만 포함하도록 허락한다.
  • 이스케이프 기능은 안전하지 않은 문자를 안전한 문자로 인코딩할 수 있게 해준다.

2.4.1 URL 문자 집합

  • US-ASCII 문자 집합을 사용 - 7비트를 사용하여 영문 자판에 있는 키 대부분과 몇몇 출력되지 않는 제어 문자를 표현함
  • 이스케이프 문자열 : US-ASCII에서 사용이 금지된 문자들로, 특정 문자나 데이터를 인코딩할 수 있게 함

2.4.2 인코딩 체계

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

2.4.3 문자 제한

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

2.5 스킴과 바다

  • http : 기본값은 80이다.
  • https : https는 HTTP 커넥션의 양 끝단에서 암호화하기 위해 SSL 계층을 사용한다. 기본 포트값은 443이다.
  • ftp : 파일 전송 프로토콜로 FTP 서버에 있는 파일을 내려 받거나 올리고, FTP 서버의 디렉토리에 있는 콘텐츠 목록을 가져오는데 사용할 수 있다.
  • file : 주어진 호스트 기기에서 바로 접근할 수 있는 파일들을 나타낸다. 각 필드도 일반적인 URL 포맷을 따른다. 만약 호스트가 생략되어 있으면, URL을 사용하고 있는 기기의 로컬 호스트가 기본값이 된다.

2.6 미래

  • URL의 단점은 리소스의 위치가 변경되면 URL을 더이상 사용할 수 없다는 것이다. 그리고 그 시점에 기존 URL이 가리키고 있던 객체를 찾을 방법이 없어진다.
  • URN은 객체가 옮겨지더라도 항상 객체를 가리킬 수 있는 이름을 제공한다.
  • PURL을 사용하면 URL로 URN의 기능을 제공할 수 있다. PURL은 리소스의 실제 URL 목록을 관리하고 추적하는 리소스 위치 중개 서버를 두고, 해당 리소스를 우회적으로 제공한다.
    • PURL은 리소스의 현재 위치를 가리키기 위해서 리소스 위치 할당 서버를 사용한다.
    • 브라우저는 리소스 리졸버에게 리소스의 현재 위치(URL)를 받는다. 그리고 리소스 리졸버에게 받은 URL로 리소스를 가져온다.