본문 바로가기

HTTP 정리

1부 2장 - URL과 리소스

URL은 인터넷의 리소스를 가리키는 표준 이름이다.

전자정보 일부를 가리키고 그것이 어디에 있고 어떻게 접근할 수 있는지 알려준다.



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


사용자는 브라우저에 URL을 입력하고 브라우저는 화면 뒤에서 사용자가 원하는 리소스를 얻기 위해 적절한 프로토콜을 사용하여 메시지를 전송함.


대부분의 URL은 동일하게 '스킴://서버위치/경로' 구조로 이루어져 있다. 모든 사람이 같은 방식으로 이름을 써서 리소스를 찾을 수 있도록, 단일 방식의 작명 규칙을 가진 것이다.



2.2 URL 문법


URL 문법은 스킴에 따라서 달라진다.

하지만 대부분의 URL은 일반 URL 문법을 따르며, 서로 다른 URL 스킴도 형태와 문법 면에서 매우 유사하다.


대부분의 URL 스킴 문법은 일반적으로 9개 부분으로 나뉨


스킴://사용자 이름:비밀번호@호스트:포트/경로;파라미터?질의#프래그먼트



2.2.1 스킴: 사용할 프로토콜


주어진 리소스에 어떻게 접근하는지 알려주는 중요한 정보.

URL을 해석하는 애플리케이션이 어떤 프로토콜을 사용하여 리소스를 요청해야 하는지 알려줌.

알파벳으로 시작해야 하고 URL의 나머지 부분들과 첫 ':' 로 구분됨. 스킴명은 대소문자를 가리지 않는다.


2.2.2 호스트와 포트


애플리케이션이 인터넷에 있는 리소스를 찾으려면 리소스를 호스팅하고 있는 장비와 그 장비 내에서 리소스에 접근할 수 있는 서버가 어디에 있는지 알아야 한다.

호스트와 포트 컴포넌트는 그 두가지 정보를 제공함.


호스트 컴포넌트는 접근하려고 하는 리소스를 가지고 있는 인터넷 상의 호스트 장비를 가리킴.

호스트 명이나 IP 주소로 제공함.


ex)  호스트 명으로 제공하는 경우: http://www.naver.com/index.html

IP 주소로 제공하는 경우: http://161.42.223.35/index.html


2.2.3 사용자 이름과 비밀번호


많은 서버가 자신이 가지고 있는 데이터에 접근을 허용하기 전에 사용자 이름과 비밀번호를 요구함.


2.2.4 경로


리소스의 서버가 어디있는지 알려줌.

서버가 리소스의 위치를 찾는데 사용하는 정보.

'/' 문자를 기준으로 경로 조각으로 나뉘고, 각 경로 조각은 자체만의 파라미터 컴포넌트를 가질 수 있음.


2.2.5 파라미터


애플리케이션이 서버에 정확한 요청을 하기 위해 필요한 입력 파라미터를 받는 데 사용한다.

URL의 나머지 부분들로부터 ' ; ' 문자로 구분함.


ex) ftp://prep.ai.mit.edu/pub/gnu;type=d (이름은 'type'이고 값은 'd' 이다.)


2.2.6 질의 문자열


데이터베이스같은 서비스들은 요청받을 리소스 형식의 범위를 좁히기 위해서 질문이나 질의를 받을 수 있다.


ex) http://www.joes-hardware.com/inventory-check.cgi?item=1242


위 예는 이름/값 쌍으로 된 질의 컴포넌트가 존재한다.

item=1242가 그것이다.


2.2.7 프래그먼트


리소스의 특정 부분을 가리킬 수 있도록, 리소스 내의 조각을 가리킬 수 있는 프래그먼트 컴포넌트를 제공한다.


ex) http://www.joes-hardware.com/tools.html#drills


위 예에서 drills 라는 프래그먼트는 죠의 컴퓨터가게 웹 서버에 위치한 /tools.html의 일부를 가리킨다.


클라이언트는 서버에 프래그먼트를 전달하지 않는다.

브라우저가 서버로부터 전체 리소스를 내려받은 후, 프래그먼트를 사용하여 당신이 보고자 하는 리소스의 일부를 보여준다.



2.3 단축 URL



2.3.1 상대 URL


URL은 상대 URL과 절대 URL로 나뉜다.

상대 URL은 모든 정보를 담고 있지는 않다. 필요한 정보를 얻기 위해서는 기저(base)라고 하는 다른 URL을 사용해야 한다.

상대 URL 문법에 따르면, HTML 작성자는 URL에 스킴과 호스트, 다른 컴포넌트들을 모두 입력하지 않아도 된다.


ex)  상대 URL = ./hammers.html

기저 URL = http://www.naver.com/tools.html

새로운 절대 URL = http://www.naver.com/hammers.html


브라우저는 상대 URL과 절대 URL간에 상호 변환을 할 수 있어야 한다.


2.3.2 URL 확장


- 호스트 명 확장: 단순 단어를 입력해도 도메인 주소로 자동 변경


ex) yahoo 입력 => www.yahoo.co.kr 로 변경


- 히스토리 확장: 과거 사용자가 방문했던 URL의 기록을 저장. 이전에 방문했던 URL의 시작 부분을 입력하면 전체 URL을 불러옴.


URL 확장 기능은 프락시와 같은 HTTP 애플리케이션에 문제를 발생시킬 수도 있고, 기능이 다르게 동작할 수도 있다.



2.4 안전하지 않은 문자


모든 프로토콜이 데이터를 전송하기 위해서 서로 다른 장치를 가지고 있기 때문에, 어떤 인터넷 프로토콜을 통해서든 안전하게 전송될 수 있도록 URL을 설계하는 것은 중요했다.


안전한 전송이란, 정보가 유실될 위험없이 URL을 전송할 수 있다는 것이다.


ex) 특정 프로토콜은 특정 문자를 제거할 수도 있는 전송 방식을 사용한다. (SMTP)


그래서 이스케이프라는 기능을 추가하여, 안전하지 않은 문자를 안전한 문자로 인코딩할 수 있게 하였다.



2.4.1 URL 문자 집합


역사적으로 많은 컴퓨터 애플리케이션이 US-ASCII 문자 집합을 사용해왔다.

US-ASCII는 문자를 서식화하고 하드웨어 상에서 신호를 주고받기 위해, 7비트를 사용하여 영문 자판에 있는 키 대부분과 몇몇 출력되지 않는 제어문자를 표현함.


다른 비주류 언어까지 US-ASCII가 지원하지는 않음.


이스케이프 문자열을 URL에 사용할 수 있도록 설계함. 이스케이프 문자열은 US-ASCII에서 사용이 금지된 문자들로, 특정 문자나 데이터를 인코딩 할 수 있게 함으로써 이동성과 완성도를 높임.


2.4.2 인코딩 체계


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


ex)

문자

ASCII 코드 

URL에서 

126 (0x7E) 

%7E 

빈 문자 

32 (0x20) 

%20 

37 (0x25) 

%25 


2.4.3 문자 제한


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

예약된 문자들을 다른 용도로 사용하려면 그 전에 인코딩 해야한다.




'HTTP 정리' 카테고리의 다른 글

1부 4장 - 커넥션 관리 - 2  (0) 2019.01.16
1부 4장 - 커넥션 관리 - 1  (0) 2019.01.12
1부 3장 - HTTP 메시지  (0) 2019.01.01
1부 1장 - HTTP 개관  (0) 2018.12.16