2장. URL과 리소스

  • 이 장에서 다루는 내용
    • URL 문법, 여러 URL 컴포넌트가 어떤 의미를 가지며 무엇을 수행하는지
    • 여러 웹 클라인트가 지원하는 상대 URL과 확장 URL 같은 단축 URL에 대해
    • URL의 인코딩과 문자 규칙
    • 여러 인터넷 정보 시스템에 적용되는 공통 URL 스킴
    • 기존 이름은 유지하면서 객체들을 다른 장소로 옮기는 것을 가능하게 해주는 URN을 포함한 URL의 미래

2.1 인터넷의 리소스 탐색

  • URL
    • URL은 브라우저가 정보를 찾는데 필요한 리소스의 위치를 가리킨다.
    • URL을 이용해 사람과 애플리케이션이 인터넷상의 수십억 개의 리소스를 찾고 사용하며 공유할 수 있다.
    • 클라이언트는 브라우저에 URL을 입력하고 브라우저는 사용자가 원하는 리소스를 얻기 위해 적절한 프로토콜을 사용해 메시지를 전송한다.
    • URI 의 더 일반화된 부류의 부분집합으로 URL는 두 가지 주요 부분집합인 URL과 URN으로 구성된 종합적인 개념이다.

    • 구성
      • 스킴://서버위치/경로
      • 스킴(어떻게) -> http://
      • 호스트(어디에) -> www.joes-hardware.com
      • 경로(무엇을) -> /seasonal/index.html

2.2 URL 문법

  • <스킴>://<사용자 이름="">:<비밀번호>@<호스트>:<포트>/<경로>;<파라미터>?<질의>#<프래그먼트>
    • 스킴
      • 리소스를 가져오려면 어떤 프로토콜을 사용하여 서버에 접근해야 하는지 가리킨다.
      • 주어진 리소스를 어떻게 접근하는지 알려주는 중요 정보
      • URL을 해석하는 애플리케이션이 어떤 프로토콜을 사용하여 리소스를 요청해야 하는지 알려준다.
    • 사용자 이름
      • 몇몇 스킴은 리소스에 접근을 하기 위해 사용자 이름을 필요로 한다.
      • 디폴트: anonymous
    • 비밀번호
      • 사용자의 비밀번호를 가리키며, 사용자 이름에 콜론(:)으로 이어서 기술
      • 사용자 이름과 비밀번호는 데이터에 접근하는 것을 허용하기 위해 ID/PW를 요구한다.
        • ftp://ftp.prep.ai.mit.edu/pub/gnu
        • ftp://anonymous@ftp.prep.ai.mit.edu/pub/gnu
        • ftp://anonymous:my_password@ftp.prep.ai.mit.edu/pub/gnu
        • http://joe:joespassword@www.joe-hardware.com/sales_info.txt
    • 호스트
      • 리소스를 호스팅하는 서버의 호스트 명이나 IP 주소
      • 리소스를 호스팅하고 있는 장비와 그 장비 내에서 리소스에 접근할 수 있는 서버가 어디에 있는지 알아야 한다.
      • 호스트 컴포넌트는 접근하려고 하는 리소스를 가지고 있는 인터넷상의 호스트 장비를 가리킨다.
    • 포트
      • 리소스를 호스팅하는 서버가 열어놓은 포트 번호, 많은 스킴이 기본 포트를 가지고 있다. (HTTP는 80이 기본 포트이다)
      • 디폴트: 스킴에 따라 다르다.
      • 포트 컴포넌트는 서버가 열어놓은 네트워크 포트를 가리킨다.
    • 경로
      • 빗금(/)으로 구분
      • 서버 내 리소스가 서버 어디에 있는지를 가리킨다.
      • 유닉스 파일시스템의 경로와 유사한 구조를 갖는다.
    • 파라미터
      • 이름/값을 쌍으로 가지며 특정 스킴들에서 입력 파라미터를 기술하는 용도로 사용된다. 세미콜론(;)으로 구분하여 기술
      • URL의 파라미터 컴포넌트는 애플리케이션이 서버에 정확한 요청을 하기 위해 필요한 입력 파라미터를 받는데 사용
        • http://www.joes-hardware.com/hammers;sale=false/index.html;graphics=true
          • URL의 hammers와 index.html이라는 두개의 경로 조작이 있다.
          • hammers 경로 조각에는 sale이 false인 파라미터를 가지고, index.html 경로 조각에는 graphics가 true인 파라미터를 갖는다.
    • 질의
      • 애플리케이션에 파라미터를 전달하는 데 사용한다 URL 끝에 ?로 구분
      • URL의 질의 컴포넌트는 게이트웨이를 가리키는 URL의 경로 컴포넌트와 함께 전달한다.
        • http://www.joes-hardware.com/inventory-check.cgi?item=12731&color=blue&size=large
          • 서버에서 item, color, size라는 변수에 대한 데이터를 사용할 수 있다.
    • 프래그먼트
      • 리소스의 조각이나 일부분을 가리키는 이름이다. URL이 특정 객체를 가리킬 경우 프래그먼트 필드는 서버에 전달되지 않는다.
      • 프래그먼트를 사용하여 보고자 하는 리소스의 일부를 볼 수 있다.
        • http://www.joes-hardware.com/tools.html#drills
          • /tools.html에 웹페이지 일부인 drills 부분을 요청

2.3 단축 URL

  • 상대 URL
    • URL에는 상대 URL과 절대 URL 두가지로 나뉜다.
    • 절대 URL에는 리소스에 접근하는 데 필요한 모든 정보를 가지고 있다.
    • 상대 URL은 기저(base)라고 하는 다른 URL을 사용한다.
    • http://www.joes-hardware.com/hammers.html
      • 기저 URL: http://www.joes-hardware.com/
      • 상대 URL: ./hammers.html
    • 기저 URL 가져오기
      • 리소스에서 명시적으로 제공
      • 리소스를 포함하고 있는 기저 URL
      • 기저 URL이 없는 경우
      • 상대 참조 해석하기
  • URL 확장
    • URL을 입력한 다음이나 입력하고 있는 동안에 자동으로 URL을 확장한다.
    • 호스트명 확장
      • 해당 기능을 지원하는 브라우저는 단순한 휴리스틱만을 사용해서 입력한 호스트명을 전체 호스트명으로 확장할 수 있다.
    • 히스토리 확장
      • 과거에 사용자가 방문했던 URL의 기록을 저장하는 것

2.4 안전하지 않은 문자

  • URL은 인터넷에 있는 모든 리소스가 여러 프로토콜을 통해서 전달될 수 있도록, 각 리소스에 유일한 이름을 지을 수 있게 설계되었다.
  • 어떤 프로토콜을 통해서든 안전하게 전송될 수 있도록 URL을 설계하는 것은 중요하다.

  • URL 문자 집합
    • 기본적으로 컴퓨터 시스템의 기본 문자 집합이 영어로 설정되어 있기 때문에 영어랑 키보드에 프린팅된 문자들로 구성 되어있다. 이 외의 문자를 포함할 때 인코딩하여 사용한다.
  • 인코딩 체계
    • URL에서 안전하지 않는 문자를 다른 문자로 치환하는 것을 URL인코딩이라고 하는데 스킴을 구분하는 :은 %3a로 인코딩 되는 식이다.
  • 문자 제한

  • 좀 더 알아보기
    • 어떤 요청을 받은 초기 어플리케이션에서 안전하지 않은 문자를 인코딩 하지 않은 것은 실수다. 서버에서도 안전하지 않은 문자가 있는지 검증해야 하는 것 맞다.

2.5 스킴의 바다

  • http: 일반 URL 포맷을 지키는 HTTP 스킴
  • https: https 는 HTTP 커넥션의 양 끝단에서 암호화기 위해 보안 소켓 계층(SSL, Secure Sockets Layer)를 사용
  • mailto: 이메일 주소를 가리킨다.
  • rtsp, rtspu: 실시간 스트리밍 프로토콜(Real Time Streaming Protocol)을 통해서 읽을 수 있는 미디어 리소스 식별자

** 출처: HTTP 완벽가이드