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

[HTTP 완벽 가이드:웹은 어떻게 동작하는가]를 보고 정리한 글입니다.

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

  • URL(Uniform Resource Locator)은 인터넷 리소스를 가리키는 표준이름
  • URL은 리소스가 어디에 있고 어떻게 접근할 수 있는지 알려주는 역할

2.2 URL 문법

  • 대부분의 URL은 일반 URL 문법을 따르며, 서로 다른 URL 스킴도 형태와 문볍면에서 매우 유사
  • URL의 가장 중요한 세가지 컴포넌트는 스킴, 호스트, 경로이다.
컴포넌트설명기본값
스킴어떤 프로토콜을 사용하여 서버에 접근해야 하는지 명시 
사용자 이름몇몇 스킴은 리소스에 접근을 하기 위해 사용자 이름이 필요anonymous
비밀번호사용자의 비밀번호를 카리키며, 사용자 이름에 콜론(:)으로 이어서 기술<이메일 주소="">
호스트리소스를 호스팅하는 서버의 호스트 명이나 IP 주소 
포트리소스를 호스팅하는 서버가 열어놓은 포트번호스킴에 따라 다름
경로이전 컴포넌트와 빗금(/)으로 구분, 서버 내 리소스가 서버 어디에 있는지를 가리킴 
파라미터특정 스킴들에서 입력 파라미터를 기술하는 용도로 사용 
질의스킴에서 애플리케이션에 파라미터를 전달하는데 쓰임, URL의 끝에 “?”로 구분 
프래그먼트리소스의 조각이나 일부분을 가리키는 이름, URL의 끝에 “#”문자로 구분 

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

  • 주어진 리소스에 어떻게 접근하는지 알려주는 중요한 정보
  • 알파벳으로 시작해야하고 URL의 나머지 부분들과 첫번째 ‘:’문자로 구분
  • 대소문자를 가리지 X

2. 호스트와 포트

  • 리소스를 호스팅하고 있는 장비와 그 장비 내에서 리소스에 접글할 수 있는 서버의 위치 정보 제공
  • 호스트 컴포넌트 접근하려고 하는 리소스를 가지고 있는 인터넷상의 호스트 장비를 가리킴
  • 아래의 첫 번째는 호스트명으로, 두 번째는 IP 주소로같은 리소스를 기리킴

    http://www.joes-hardware.com:80/index.html

    http://161.58.228.45:80/index.html

  • 포트 컴포넌트는 서버가 열어놓은 네트워크 포트를 가리킴 - 내부적으로 TCP 프로토콜을 사용하는 HTTP는 기본 포트로 80을 사용

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

  • 많은 서버가 자신이 가지고 있는 데이터에 접근을 허용하기 전에 사용자 이름과 비밀번호를 요구
  • ’@’ 문자는 URL로부터 사용자 이름과 비밀번호 컴포넌트를 분리

    ftp://ftp.prep.ai.mit.edu/pub/gnu - 이름, 비밀번호 없음

    ftp://anonymous:my_passwd@ftp.prep.ai.mit.edu/pub/gnu - 이름, 비밀번호 있음

4. 경로

  • 서버 내 리소스의 위치 정보 제공
  • 계층적 파일 시스템 경로와 유사한 구조를 가짐
  • ’/’문자를 기준으로 경로조각으로 나뉘게 되며, 각 경로조각은 자체만의 파라미터 컴포넌트를 가질 수 있음

5. 파라미터

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

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

  • HTTP URL에서의 경로 컴포넌트는 경로조각으로 나눌 수 있고, 각 조각은 자체 파라미터를 가질 수 있다
  • 위의 URL에서 hammers 경로조각은 값이 false인 slae이라는 파라미터를, index.html 경로조각은 값이 ture인 grapgics란 파라미터를 가짐

6. 질의 문자열

  • 데이터베이스 같은 서비스들은 요청받을 리소스 형식의 범위를 좁히기 위해서 질문이나 질의를 받을 수 있음
  • URL의 질의 컴포넌트는 게이트웨이를 가리키는 URL의 경로 컴포넌트와 함께 전달

    http://www.joes-hardware.com/inventory-check.cgi?item=12731&color=blue

  • 편의상 많은 게이트웨이가 ‘&’로 나뉜 ‘이름=값’쌍 형식의 질의 문자열을 원함
  • 위의 예에는 item=12731과 color=blue 두 개의 질의 컴포넌트가 존재 - 제품번호가 12731이고, 파란색인 물품의 재고가 있는지 검사

7. 프래그먼트

  • 리소스의 특정 부분을 가리킬 수 있음
  • HTTP 서버는 객체 일부가 아닌 전체만 다루기 때문에, 클라이언트는 서버에 프래그먼트를 전달하지 않음 -> 전체 리소스를 내려받은 후, 프래그먼트를 사용하여 리소스의 일부를 보여주는 방식
  • 프래그먼트는 URL의 오른쪽에 # 문자에 이어서 존재

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

2.3 단축 URL

2.3.1 상대 URL

  • URL을 짧게 표기하는 방식
  • 상대 URL로 리소스에 접근하는데 필요한 모든 정보를 얻기 위해서는, 기저(base)라고 하는 URL을 사용해아 함
  • 상대 URL 문법에 따르면, URL에 스킴과 호스트, 그리고 다른 컴포넌트들을 모두 입력하지 않아도 됨 ( 기저 URL을 통해 파악 가능 )

2.3.2 URL 확장

  • 특정 브라우저들은 URL을 입력한 다음이나 입력하고 있는 동안 자동으로 URL을 확장해 사용자가 URL을 빠르게 입력할 수 있게 도와줌
  1. 호스트명 확장
    • 주소 입력란에 ‘naver’를 입력하면, 브라우저는 호스트 명에 자동으로 ‘www.’와 ‘.com’을 붙여서 ‘www.naver.com’을 만듬
    • 사용자의 시간을 절약하고 혼란을 막아주지만, 프락시와 같은 다른 HTTP 애프리케이션에 문제를 발생시킬 수 있음 (6장 상세)
  2. 히스토리 확장
    • ‘http://nav’와 같이 이전에 방문했던 URL의 시작 부분 입력 시, ‘http://naver.com’을 표시
    • 프락시를 사용할 경우 URL 자동확장 기능은 다르게 동작할 수 있음

2.4 안전하지 않은 문자

  • 안전한 전송 - 정보가 유실될 위험 없이 URL을 전송할 수 있다는 것
  • 전자메일에 사용되는 SMTP와 같이 특정 문자를 제거할 수도 있는 전송 방식을 사용하는 프로토콜의 경우, URL에 상대적으로 작고 일반적으로 안전한 알파벳 문자만 포함하도록 허락
  • 출력이 되지 않거나 보이지 않는 문자들을 사용하는 것은 금지됨
  • 이스케이프라는 기능을 통해 안전하지 않은 문자를 안전한 문자로 인코딩 가능

2.4.1 URL 문자 집합

  • 많은 컴퓨터 애플리케이션이 US-ASCII 문자 집합을 사용
  • US-ASCII는 적은 수의 문자만을 포함하고 있어 표현 가능한 언어의 수가 적음
  • URL이 특정 이진 데이터를 포함해야 하는 경우가 존재
  • 위의 문제를 해결하기 위해 URL에 이스케이프 문자열을 쓸 수 있게 설꼐
    • 이스케이프 문자열은 US-ASCII에서 사용이 금지된 문자들로, 특정 문자나 데이터를 인코딩할 수 있게하여 이동성과 완성도를 높임

2.4.2 인코딩 체계

  • 안전하지 않은 문자를 퍼센티치 기호(%)로 시작해, ASCII 코드로 표현되는 두 개의 16진수 숫자로 이루어진 ‘이스케이프’문자로 변환
문자ASCII 코드URL의 예
~126 (0x7E)http://github.taeho0304.io/%7Etaeho
빈문자32 (0x20)http://github.taeho0304.io/more%20about.html
%37 (0x25)http://github.taeho0304.io/100%25

2.4.3 문자제한

  • 몇몇 문자는 URL 내에서 특별한 의미로 예약되어 있음
  • URL에서 예약된 문자들을 본래의 목적이 아닌 다른 용도로 사용하려면, 그전에 반드시 인코딩해야 함
문자선점 및 제한
%인코딩된 문자에 사용할 이스케이프 토큰으로 선점
/경로 컴포넌트에 있는 경로 세그먼트를 나누는 용도로 선점
.경로 컴포넌트에서 선점
..경로 컴포넌트에서 선점
#프래그먼트의 구획 문자로 선점
?질의 문자열의 구획 문자로 선점
;파라미터의 구획 문자로 선점
:스킴, 사용자 이름/비밀번호, 호스트/포트의 구획 문자로 선점

2.5 스킴의 바다

  • 웹에서 쓰이는 스킴들 ( 종류는 많지만 대표적인 3개만 정리)
스킴설명
http일반 URL 포맷을 지키는 하이퍼텍스트 전송 프로토콜로 기본 포트값은 80이다
httpshttp 스킴과 거의 같다. 차이점은 HTTP의 커넥션의 양 끝단에서 암호화하기 위해 넷스케이프에서 개발한 보안 소켓 계층(Secure Sockets Layer, SSL)을 사용한다. 기본 포트값은 443이다.
ftpFTP 서버에 있는 파일을 올리거나 내리고, FTP 서버 디렉토리의 콘텐츠 목록을 가져오는데 사용