HTTP 완벽 가이드
2부 URL과 리소스
- 도시의 리소스를 분류하기 위해서 모든 것이 그만의 표준화된 이름을 가지고 있다.
Ex) 책은 ISBN 번호를, 버스는 노선 번호를, 은행 계좌는 계좌 번호를, 사람은 사회보장번호 ( 주민등록번호 )를 가진다.
=> 모두가 이렇게 각기 다른 이름들에 대한 작명 표준에 동의하기 때문에, 도시에 있는 소중한 리소스를 모두 쉽게 공유 할
수 있다.
※ URL : 인터넷의 리소스를 가리키는 표준 이름이다.
URL은 전자 정보 일부를 가리키고 그것이 어디에 있고 어떻게 접근 할 수 있는지 알려준다.
2.1 인터넷 리소스 탐색하기
- URL은 브라우저가 정보를 찾는 데 필요한 리소스의 위치를 가리키며, URL을 이용해 사람과 애플리케이션이 인터넷
상의 수십억 개의 리소스를 찾고 공유 할 수 있다.
http://www.joes-hardware.com/seasonal/index-fall.html 이라는 URL을 불러 올 때
1. URL의 첫 부분인 http는 URL의 스킴이다. 스킴은 웹 클라이언트가 리소스에 어떻게 접근하는지 알려준다.
이 경우에 URL이 HTTP 프로토콜을 사용한다.
2. URL의 두번째 부분인 www.joes-hardware.com은 서버의 위치다.
이는 웹 클라이언트가 리소스가 어디에 호스팅 되어 있는 지 알려준다.
3. URL의 세 번째 부분인 /seasonal/index-fall.html은 리소스의 경로이다.
경로는 서버에 존재하는 로컬 시소스들 중에서 요청받은 리소스가 무엇인지 알려준다.
- URL은 HTTP 프로토콜이 아닌 다른 가용한 프로토콜을 사용할 수 있다.
- mailto:president@whitehouse.gov : 이메일 주소를 가리킨다.
- ftp://ftp.lots-o-books.com/pub/complete-price-list.xls : FTP (file Transfer Protocol ) 서버에 올라가 있는 파일을 가리킴
- rtsp://www.joes-hardware.com/interview/cto_video : 스트리밍을 제공하기 위해 비디오 서버에 호스팅하고 있는 영화를 카리킨다.
- URL을 사용하면 리소스를 일관된 방식으로 지칭할 수 있다. 대부분의 URL은 동일하게 ' 스킴://서버위치/경로 ' 구조로
이루어져 있다.
=> 인터넷상의 모든 리소스를 가리키고 가져오기 위해, 모든 사람들이 같은 방식으로 이름을 써서 리소스를 찾을 수
있도록, 단일 방식의 작명 규칙을 가진 것이다!
2.2 URL 문법
- URL로 인터넷 상의 모든 리소스를 찾을 수 있다.
이 리소스들은 다른 스킴 ( HTTP, FTP, SMTP )를 통해 접근 할 수 있으며 URL 문법은 스킴에 따라 달라 진다.
◎ 다른 스킴을 사용한다고 전혀 다른 문법을 사용하는 것이 아니라 대부분 URL은 일반 URL문법을 따르며 서로 다른 URL 스킴도 형태와 문법 면에서 매우 유사하다.
ULR 스킴의 문법
<스킴>://<사용자이름>:<비밀번호>@<호스트>:<포트>/<경로>;<파라미터>?<질의>#<프래그먼트>
스킴 : 리소스를 가져오려면 어떤 프로토콜을 사용하여 서버에 접근해야 하는지 가리킨다.
사용자 이름 : 몇몇 스킴은 리소스에 접근을 하기 위해 사용자 이름을 필요로 한다.
비밀번호 : 사용자의 비밀번호를 가리키며, 사용자 이름에 콜론 (:)으로 이어서 기술한다.
호스트 : 리소스를 호스팅하는 서버의 호스트 명이나 IP 주소
포트 : 리소스를 호스팅하는 서버가 열어놓은 포트 번호. 많은 스킴이 기본 포트를 가지고 있다.
경로 : 이전 컴포넌트와 빗금으로 구분되어 있으며 서버 내 리소스가 서버 어디에 있는지 가리킨다.
파라미터 : 특정 스킴들에서 입력 파라미터를 기술하는 용도로 사용된다.
파라미터는 이름/값을 쌍으로 가진다. 파라미너틑 다른 파라미터나 경로의 일부와 세미콜론으로 구분되며 여러개를 가질 수 있다.
질의 : 스킴에서 애플리케이션(데이터베이스, 게시판, 검색엔진, 기타 인터넷 게이트웨이)에 파라미터를
전달하는데 사용된다. 질의 컴포넌트를 작성하는데 쓰이는 공통 포맷은 없다. URL의 끝에 ?로 구분한다.
프래그먼트 : 리소스의 조각이나 일부를 가리키는 이름이다.
2.2.1 스킴 : 사용할 프로토콜
- 스킴은 주어진 리소스에 어떻게 접근하는지 알려주는 중요한 정보다.
- 이는 URL을 해석하는 애플리케이션이 어떤 프로토콜을 사용하여 리소스를 요청해야 하는 지 알려준다.
- 스킴 컴포넌트는 알파벳으로 시작해야 하고 URL의 나머지 부분들과 첫 번째 ( : ) 문자로 구분한다.
스킴 명은 대소문자를 가리지 않으므로 HTTP:// http://는 동일하다.
2.2 호스트와 포트
- 애플리케이션이 인터넷에 있는 리소스를 찾으려면 리소스를 호스팅하고 있는 장비와 그 장비 내에서 리소스에
접근할 수 있는 서버가 어디에 있는지 알아야 한다. URL의 호스트와 포트 컴포넌트는 그 두 가지 정보를 제공한다.
- 호스트 컴포넌트는 접근하려고 하는 리소스를 가지고 있는 인터넷 상의 호스트 장비를 가리킨다.
http://www.joes-hardware.com:80/index.html : 호스트명
http://161.58.228.45:80/index.html : IP 주소
2.2.3 사용자 이름과 비밀번호
- 많은 서버가 자신이 가지고 있는 데이터에 접근을 허용하기 전에 사용자 이름과 비밀번호를 요구한다.
ftp://ftp.prep.ai.mit.edu/pub/gnu
사용자 아이디 비밀번호를 요구하는 URL 스킴을 사용할 때 사용자 이름과 비밀번호를 기술하지 않으면
기본 사용자 이름 값으로 anonnymous + 비밀번호는 브라우저 마다의 기본 값을 사용한다.
ftp://anonymous@ftp.prep.ai.mit.edu/pub/gnu
호스트 컴포넌트와 나란히 기술되어 있는 사용자 이름은 단순히 이메일 주소처럼 보이기도 하지만
'@' 문자는 URL로부터 사용자 이름과 비밀번호 컴포넌트를 분리한다.
ftp://anonymous:my_passwd@ftp.prep.ai.mit.edu/pub/gnu
사용자 이름 ' anonymouse '와 비밀번호 ' my_passwd '를 : 문자로 분리하여 기술하였다!
http://joe:joespasswd@www.joes-hardware.com/sales_info.txt
2.2.4 경로
- URL 경로 컴포넌트는 리소스가 서버의 어디에 있는지 알려준다.
=> 해당 경로는 계층적 파일 시스템 경로와 유사한 구조를 가진다.
http://www.joes-hardware.com:80/seasonal/index-fall.html
- 위 URL 경로는 '/seasonal/index-fall.html'로 유닉스 파일 시스템의 파일 경로와 유사하다.
- 경로는 서버가 리소스의 위치를 찾는 데 사용하는 정보다.
- HTTP URL 에서 경로는 ' / ' 문자를 기준으로 경로조각으로 나뉜다.
2.2.5 파라미터
- 많은 스킴이 객체에 대한 호스트 및 경로 정보만으로는 리소스를 찾지 못한다. 서버가 어떤 포트를 열어놓고 있는지,
리소스에 접근하기 위해 사용자 이름과 비밀번호를 명시했는지 여부 외에도 많은 프로토콜 정보를 요구하게 된다.
- URL을 사용하는 애플리케이션에게 프로토콜 파라미터가 없으면 다른 한편에 있는 서버는 그 요청을 잘못 처리하거나
처리하지 않을 수 있다.
- FTP의 경우 바이너리와 텍스트 두 개의 포맷을 지원하는데 바이너리 이미지가 텍스트 형식으로 전송되길 원치 않는다!
- URL 파라미터 컴포넌트는 이름 / 값 쌍의 리스트로 URL 나머지 부분들로부터 ' ; ' 문자로 구분하여 URL에 기술한다.
ftp://prep.ai.mit.edu/pub/gnu;type=d
- 위 경우 이른은 type이고 값은 'd'인 한 개의 파라미터를 전달한다.
http://www.joes-hardware.com/hammers;sale=false/index.html;graphics=true
- 위 경우에 보다시피 경로 컴포넌트는 경로 조각으로 나눌 수 있는 데 각 조각은 자체 파라미터를 가질 수 있다.
- hammers 경로는 sale=flase 파라미터를, index.html 경로는 graphics=true 파라미터를 가진다.
2.2.6 질의 문자열
- 데이터베이스같은 서비스들은 요청받을 리소스 형식의 범위를 좁히기 위해 질문이나 질의를 받을 수 있다.
http://www.joes-hardware.com/inventory-check.cgi?itme=12731
아이템 번호가 12731이고 재고가 있는지 확인 하기 위한 쿼리
- 질의 컴포넌트는 물음표 ( ? ) 우측에 있는 값들이다!
- URL 질의 컴포넌트는 게이트웨이를 가리키는 URL의 경로 컴포넌트와 함께 전달된다.
http://www.joes-hardware.com/inventory-check.cgi?item=12731&color=blue&size=large
제품번호가 12731이고 큰 치수에 파란색 물품의 제고가 있는지 물어보는 URL
편의상 많은 게이트웨이가 &로 나뉜 이름=값 쌍 형식의 질의 문자열을 원한다.
item=12731&color=blue&size=large => 재고 확인 게이트웨이!
2.2.7 프래그먼트
- HTML 같은 리소스 형식들은 본래의 수준보다 더 작게 나뉠수 있다.
- 절 ( paragraph )이 포함된 용량이 큰 테긋트 문서의 경우 리소스의 특정 부분을 가리킬 수 있도록, URL은 리소스 내의
조각을 가리킬 수 있는 프래그먼트 컴포넌트를 제공한다.
http://www.joes-hardware.com/tools.html#driils
프래그먼트는 URL의 오른쪽 # 문자에 이어서 온다.
이를 통해 URL은 HTML문서에 있는 특정 이미지나 일부분을 가리킬 수 있다.
- 일반적으로 HTTP 서버는 객체 일부가 아닌 전체만 다루기 때문에, 클라이언트는 서버에 프래그먼트를 전달하지 않는다.
- 브라우저가 서버로부터 전체 리소스를 내려받은 후, 프래그먼트를 사용하여 당신이 보고자하는 리소스의 일부를
보여준다.
HTTP 완벽 가이드 : 네이버 도서
네이버 도서 상세정보를 제공합니다.
search.shopping.naver.com