http 완벽가이드 - 2장 URL과 리소스

Dahee Kim·2021년 7월 11일
0

HTTP 완벽 가이드 2장 URL과 리소스

지난번 1장 요약 후 한 . 장 . 도 . 넘 겨 보 지 않 았 다 (반성)

URL이란?

  • URI (Uniform Resource Identifier, 통합 자원 식별자)의 부분집합.
    - URI에는 URL, URN이 있다
  • URL은 리소스가 어디 있는지 설명해서 리소스를 식별한다.
    - (한계점) 리소스를 찾는데 필요한 포트와 서버 이름을 제공하고, 특정 시점에 어떤 것이 위치한 곳을 알려주기 때문에 리소스가 옮겨지면 URL을 더는 사용할 수 없다.
    - 이러한 한계점이 있기 때문에 URN이 만들어졌다. URN은 객체의 위치와 상관없이 그 객체를 가리키는 실제 객체의 이름을 사용한다. 객체가 옮겨지더라도 (웹서버 내, 웹서버 간 모두) 항상 객체를 가리킬 수 있다.

일반적인 URL의 구조

ex) https://developer.mozilla.org/ko/docs/Web/HTML

  • 스킴://호스트(서버위치)/경로
    https :URL의 스킴
    developer.mozilla.org : 호스트 - 서버의 위치
    +생략된 포트 (http의 기본 포트는 80, https의 기본 포트는 432)
    /ko/docs/Web/HTML : 경로 - 리소스의 경로
  • 스킴 : 리소스를 가져오기 위해 사용할 프로토콜
  • 호스트 : 리소스를 호스팅하는 서버의 호스트명이나 IP 주소
  • 포트 : 리소스를 호스팅하는 서버가 열어놓은 포트번호. 많은 스킴이 기본 포트를 가지고 있다. (default 값이 스킴에 따라 다름)
  • 경로 : 서버 내 리소스가 서버 어디에 있는지 가리킨다. 경로 컴포넌트의 문법은 서버와 스킴에 따라 다를 수 있다. 이전 컴포넌트와 /로 구분한다.

추가 URL 문법

  • 파라미터 : 특정 스킴에서 입력 파라미터를 기술하는 용도로 사용. 다른 컴포넌트와 ;으로 구분.
    ex) /hammers;sale=false/index.html;graphics=true

  • 질의 문자열 : 스킴에서 애플리케이션에 파라미터를 전달하는 용도. ?로 다른 컴포넌트와 구별. 여러 개의 파라미터를 전달할 때는 & 사용
    ex) /inventory-check.cgi?item=12731&color=blue

  • 프래그먼트 : 리소스 안에 있는 특정 부분을 가리킬 때 사용한다. 프래그먼트를 통해 HTML문서에 있는 특정 이미지나 일부분을 가리킬 수 있다. 서버는 객체 전체를 다루는 것이 일반적이기 때문에 클라이언트는 서버에 프래그먼트를 전달하지 않는다. 클라이언트는 서버로부터 전체 리소스를 내려받은 후 프래그먼트로 보고자하는 리소스의 일부를 보여준다.
    ex) /tools.html#drills

  • 나머지는 아래 사진 참고 (사용자 이름, 비밀번호)

단축 URL

상대 URL

  • URL을 짧게 표기하는 방식. html을 직접 작성할 때 URL전체가 아닌 './hammers.html'과 같이 상대경로만 표기하는 방식.
  • HTML작성자는 URL에 스킴과 호스트 등을 모두 입력하지 않아도 된다. 그 정보는 컴포넌트가 포함된 기저 URL에서 알아낼 수 있다. 기저 URL을 입력하여 상대 URL에서 기술하지 않은 정보를 알아낼 수 있다.
  • 브라우저와 같은 애플리케이션은 상대 URL과 절대 URL간에 상호 변환을 할 수 있어야 한다.

기저 URL

기저 URL은 다음과 같은 방법들로 가져올 수 있다.

  • 리소스에서 명시적으로 제공 : <base> 태그를 사용하여 기저 URL을 명시할 수 있다.
  • 리소스를 포함하고 있는 URL : 명시되지 않은 경우 리소스가 포함되어 있는 곳의 URL을 기저 URL로 쓸 수 있다.
  • 기저 URL이 없는 경우 : 절대 URL만으로 이루어져 있거나, 깨진 URL인 경우

(아이고 힘들어)

URL 확장

브라우저 주소창에 url을 입력하고 있는 동안 URL이 자동으로 완성되는 경험을 해본 적이 분명 있을 것이다 ... 그것에 대한 이야기다. 브라우저가 사용하는 기술!

  • 호스트 명 확장 : 입력한 호스트 명을 전체 호스트 명으로 확장!
    ex) yahoo를 입력 -> www.yahoo.com으로 자동완성! 또는 가능성 있는 몇가지 URL 제시 (www.yahoo.gg, www.yahoo.co.kr)
  • 히스토리 확장 : 과거 사용자가 방문해놓은 URL의 기록을 저장하여 URL 일부를 입력하면 완결된 형태의 URL들을 사용할 수 있게 해준다.

    주의! 프락시를 사용할 경우 이러한 URL기능은 다르게 동작할 수 있다는 것을 유념해야한다. 6장의 'URI 클라이언트 자동 확장과 호스트명 분석'에서 상세히 다룰 것이라고 한다. 참고하시길.

안전하지 않은 문자

정보가 유실될 위험 없이 URL을 전송하는 것이 바로 안전한 전송. SMTP같은 프로토콜은 특정 문자를 제거할 수도 있는 전송방식을 사용하는데, 이러한 일을 방지하고자 URL에 일반적으로 알파벳 문자만 포함하도록 허락된다.
URL에 이진데이터 또는 알파벳 외의 문자를 포함해야하는 경우도 있기 때문에 이스케이프라는 기능으로 안전하지 않은 문자를 안전한 문자로 인코딩할 수 있게 하였다. (가끔 URL을 보면 있던 %7%20... 요런 것들이 떠오를 것이다.)

이스케이프 문자열

URL에 허락되지 않은 문자 (US-ASCII가 지원하지 않는 문자)이진 데이터를 포함시켜야하는 경우 이스케이프 문자열을 사용하여 이들을 인코딩시킬 수 있도록 하여 이동성과 URL의 완성도를 높였다.

  • 인코딩 체계 : 안전하지 않은 문자를 %로 시작해 ASCII 코드로 표현되는 두 개의 16진수 숫자로 이루어진 이스케이프문자로 바꾼다.
  • URL내에서 특별한 의미로 예약되어 있거나, 몇몇 프로토콜에서 혼동되는 것으로 알려진 문자들은 본래의 목적이 아닌 다른 용도로 사용하려는 경우 반드시 인코딩이 필요하다.

좀 더 알아보기

왠지 URL에 한글이 들어간 경우를 본 적 있는 것 같지 않은가..? 나도다! 어떤 전송 프로토콜에서는 이것이 별 문제가 되지 않기도 하지만.... 사실 애플리케이션 개발자들이 안전하지 않은 문자를 인코딩하지 않는 것은 실수라고 한다!

스킴의 바다

아래 스킴이 무엇인지는... 궁금하다면 직접 알아보자! (http, https말고는 쓸 일이 없지 않을까)

  • http
  • https
  • malito
  • ftp
  • rtsp, rtspu
  • file
  • news
  • telnet

참고자료

책 http 완벽 가이드 2장

profile
하루가 너무 짧아~

0개의 댓글