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

Jinyongmin·2024년 7월 22일

HTTP 완벽 가이드

목록 보기
2/5
post-thumbnail

이 글은 'HTTP 완벽 가이드' 책을 읽고 정리한 내용입니다.

URL이란?

URL(Uniform Resource Locator) 은 인터넷의 리소스를 가리키는 표준이름으로 리소스의 식별자 역할을 한다.

  • URI의 한 종류로 다른 하나는 URN이 있다.

URL 구조

URL은 다음과 같은 구조로 나뉜다.

  1. 스킴(http://) : 웹 클라이언트가 리소스에 어떻게 접근하는지 알려준다. (HTTP, FTP 와 같은 프로토콜)
  2. 서버의 위치(www.mywebpage.com) : 웹 클라이언트가 리소스가 어디에 호스팅 되어 있는지 알려준다.
  3. 리소스의 경로(/index.html) : 웹 서버에서 요청받은 리소스가 무엇인지 알려준다.

URL은 HTTP 프로토콜이 아닌 다른 프로토콜을 사용할 수 있다.

  • 메일 : persident@whitehouse.gov
  • 파일 : ftp://ftp.lots-o-books.com/pub/complete-price-list.xls
  • 스트리밍 : rtsp://www.joes-hardware.com:554/interview/cto_video

URL 문법

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

  • URL 스킴의 문법은 일반적으로 9개 부분으로 나뉜다.
  • URL의 가장 중요한 3가지 컴포넌트는 스킴, 호스트, 경로 이다.

1. 스킴

  • 사용할 프로토콜
  • 대소문자의 구분이 없다.
    • http = HTTP
  • ex) http, ftp ...
  • 기본 값 : 없음
    2.호스트와 포트
  • 리소스를 호스팅하고 있는 장비 + 장비 내에 리소스에 접근할 수 있는 서버
  • ex) www.joes-hardware.com:80
    • 내부적으로 TCP 프로토콜을 사용하는 HTTP는 기본 포트로 80을 사용한다.
  • 기본 값
    • 호스트 : 없음
    • 포트 : 스킴에 따라 다름
      3. 사용자 이름과 비밀번호
  • 서버가 데이터 접근을 허용하기 위해 요구하는 요쇼
  • FTP의 예시
    • ftp://anonymouse:my_passwd@ftp.prep.ai.mit.edu/pub/gnu
    • "anonymouse:my_passwd@" 해당 부분으로 명시되어있지 않을 경우 기본 값으로 세팅된다.(생략가능)
    • 기본 값
      • 사용자 이름 : anonymouse
      • 비밀번호 : 브라우저마다 가지고 있는 기본 값 (인터넷 익스플로어 - 'IEUser')

4. 경로

  • 리소스가 서버의 어디에 있는지 알려주는 정보
  • ex) www.joes-hardware.com:80/seasonal/index-fail.html
    • 이 중에서 "/seasonal/index-fail.html"

5. 파라미터

  • 리소스에 접근하는데 필요한 추가 정보
  • ex) ftp://prep.ai.mit.edu/pub/gnu;type=d
    • 여기서 이름은 type, 값은 d인 파라미터를 전달

Q. HTTP에서 보통 경로 뒤에 "?" 이후 쿼리 파라미터 형식으로 요청을 하지 않나?
A. 리소스 자체에 접근하는데 필요한 정보이며 쿼리 파라미터는 리소스 형식의 범위를 좁히기 위한 것으로 6. 질의 문자열에서 설명한다.

6. 질의 문자열

  • 요청받을 리소스 형식의 범위를 좁히기 위한 질문, 질의 (DB같은 서비스에서 사용)
  • ex) www.joes-hardware.com:80/inventory-check.cgi?item=12731&color=blue
    • item=12731
    • color=blue

API 개발할 때 주로 사용한다. 보통 검색 기능을 구현할 때 많이 사용하는데 쿼리 파라미터 형식으로 검색 조건에 따른 검색어 입력 값을 받아 해당 조건에 맞는 데이터를 select해 결과를 반환해준다.

7. 프래그먼트

  • HTML 같은 리소스 형식들은 본래의 수준보다 더 작게 나뉠 수 있는데 이는 특정 부분을 가리킬 수 있는 요소
  • ex) http://www.joes-hardware.com/tools.html#drills
    • "tools.html" 웹페이지의 "drills"이라는 부분을 가리킨다.
  • 일반적으로 HTTP 서브는 전체만 다루기 때문에 클라이언트에게 일부만 전달하지 않는다.
    • 그래서 전체를 내려받고 프래그먼트를 사용해 클라이언트가 보고자 하는 리소스의 일부만 보여준다.
    • 즉, 서버는 객체 단위 전송이기 때문에 URL 프래그먼트는 클라이언트에서만 사용된다.

단축 URL

웹 클라이언트는 몇몇 단축 URL을 인식하고 사용하는데 크게 두가지 기술이 있다.

1. 상대 URL

URL을 표기하는 방법은 크게 두가지로 나뉜다.\

  • 상대 URL
  • 절대 URL

이는 상대 경로, 절대 경로를 생각하면 되는데 상대 경로란 현재 위치에서의 대상 위치를 나타내는 것이고 절대 경로란 현재 위치와 상관없이 대상 위치를 전부 나타내는 것이다.

<HTML>
<HEAD><TITLE>Joe's Tools</TITLE></HEAD>
<BODY>
...
<P>Joe's ~~ <A HREF="./hammers.html"></A> hammers</P>
</BODY>
</HTML>

html 코드에서 A 태그의 URL이 경로 부분만 표현된 것을 알 수 있다. 이렇게 상대 URL로 표현할 경우 기저 URL이 필요하다.

기저 URL을 가져오는 방법
  1. 리소스에서 명시적으로 제공 : HTML 문서에서 그 안에 있는 모든 상대 URL을 변경하기 위해 기저 URL을 가리키는 <BASE>HTML 태그를 기술할 수 있다.
  2. 리소스를 포함하고 있는 기저 URL : 명시되어 있지 않을 경우 해당 리소스의 URL을 가져와 기저 URL로 사용한다.
  3. 기저 URL이 없는 경우 : 보통 이런 경우 절대 URL만으로만 이루어져 있다.

URL을 파싱하는 것에 불과하지만,. 컴포넌트 단위로 분리한다는 점에서 이 작업을 'URL 분해하기'라고 부르기도한다.

위에서 언급한 기저 URL을 가져오는 방법에 따라서 판단하고 여러가지 컴포넌트(파라미터, 질의 등)의 여부 확인 후 새로운 절대 URL로 변환하는 과정을 표현한 것이다.
=> 즉, 상대 URL을 받았을 때 일련의 과정을 거처 절대 URL로 변환

2. URL 확장

웹 브라우저에서 특정 서비스에 접근하기 위해 URL을 치는 과정에서 자동완성되는 경험을 해본 적이 있을 것이다. 이는 URL 확장 기능 덕분이다.

1. 호스트 명 확장

  • 주소 입력란에 'yahoo'를 입력
  • 브라우저는 호스트 명에 자동으로 'www'., '.com'을 붙여서 'www.yahoo.com'을 만든다

2. 히스토리 확장

  • 사용자가 방문했던 URL의 기록을 저장
  • 저장된 URL을 입력할 경우 앞 글자들을 포함하는 URL들을 선택하게 해준다.

안전하지 않은 문자

모든 프로토콜이 데이터를 전송하기 위해 서로 다른 장치를 가지고 있기 때문에 안전하게 전송될 수 있도록 URL을 설계하는 것이 중요했다. 안전한 전송이란 정보가 유실될 위험 없이 전송할 수 있는 것을 의미한다.

URL은 다음과 같은 인코딩 규칙을 통해 안전성을 보장한다.

1. URL 문자 집합

URL은 많은 컴퓨터가 그러는 것처럼 US-ASCII 문자 집합을 사용
문제점

  • 유럽 언어, 수백 가진 비 라틴계 언어는 US_ASCII를 지원하지 않는다.
  • 특정 이진 데이터를 포함하지 못한다.
    해결 방법
    URL에 이스케이프 문자열을 쓸 수 있게 설계했다. 이스케이프 문자열은 US-ASCII에서 사용이 금지된 문자들로, 특정 문자나 데이터를 인코딩할 수 있게 함으로써 이동성과 완성도를 높였다.
    ('\n', '\t', '\w' 등의 문자열을 뜻한다.)

2. 인코딩 체계

안전한 문자 집합을 이용하는 경우 그 표현의 한계를 넘기 위해, URL에 있는 안전하지 않은 문자들을 표현할 수 있는 인코딩 방식이 고안되었다. '%'와 같이 안전하지 않은 문자를 ASCII 코드로 표현되는 두 개의 16진수 숫자로 이루어진 이스케이프 문자로 바꾼다.

3. 문자 제한

URL 내에서 몇몇 문자는 특별한 의미로 예약되어 있기 때문에 다른 용도로 사용하기 위해 그 전에 반드시 인코딩을 해야한다. 예시는 다음과 같다.

0개의 댓글