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인 파라미터를 갖는다.
- http://www.joes-hardware.com/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라는 변수에 대한 데이터를 사용할 수 있다.
- http://www.joes-hardware.com/inventory-check.cgi?item=12731&color=blue&size=large
- 프래그먼트
- 리소스의 조각이나 일부분을 가리키는 이름이다. URL이 특정 객체를 가리킬 경우 프래그먼트 필드는 서버에 전달되지 않는다.
- 프래그먼트를 사용하여 보고자 하는 리소스의 일부를 볼 수 있다.
- http://www.joes-hardware.com/tools.html#drills
- /tools.html에 웹페이지 일부인 drills 부분을 요청
- http://www.joes-hardware.com/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 완벽가이드