Back-End/HTTP

[HTTP 완벽 가이드][웹의 기초] 2.URL과 리소스

얄루몬 2022. 4. 20. 21:01

💻본 포스팅은 'HTTP 완벽 가이드 : 웹은 어떻게 동작하는가' 책을 보고 작성되었습니다.


[URL과 리소스]

수많은 리소스 분류를 위한 표준 이름이 URL이다.

 

[인터넷 리소스 탐색하기]

  • URL: 브라우저가 정보를 찾는데 필요한 리소스 위치를 가르킨다.
  • URN: 위치가 어디있는지 상관 없이 이름만 찾아낸다.

URI/URN/URL

  • URI가 URL보다 더 큰 개념이지만 대게의 사람들은 URL = URI의 개념으로 사용한다.

 

[URL 구성]

http://www.joes-hardware.com/seasonal/index-fall.html  

 

  • http://
    • 스키마(어떻게?)
    • 웹 클라이언트가 어떻게 접근하는지를 알려준다.
  • www.joes-hardware.com/ 
    • 서버 위치(어디에?)
    • 웹 클라이언트가 리소스가 어디에 호스팅되어 있는지 알려준다.
  • seasonal/index-fall.html
    • 리소스 경로(무엇을?)
    • 어떤 리소스를 요청 받았는지 알려준다

 

[URL 문법]

<스킴>://<사용자이름>:<비밀번호>@<호스트>:<포트>/<경로>;<파라미터>?<질의>#<프래그먼트>
스킴 : 사용할 프로토콜
  • 주어진 리소스에 어떻게 접근하는지 알려주는 중요한 정보
    • 어떤 프로토콜을 사용하여 리소스를 요청해야 하는지
  • 스킴 컴포넌트는 알파벳으로 시작해야 하고 URL의 나머지 부분들과 ‘:’로 구분
  • 스킴명은 대소문자를 구분하지 X
  • HTTP://github.com == http://github.com
호스트와 포트
  • 리소스를 호스팅하고 있는 장비와 장비 내에서 리소스에 접근할 수 있는 서버가 어디에 있는지 알려주는 역할
  • 호스트 컴포넌트 : 접근하려고 하는 리소스를 가지고 있는 인터넷 상의 호스트 장비를 가리킴
    • 호스트 명이나 IP주소로 제공
  • 포트 컴포넌트 : 서버가 열어 놓은 네트워크 포트를 가리킴
    • 내부적으로 TCP 프로토콜을 사용하는 HTTP는 기본 포트로 80을 사용

사용자 이름과 비밀번호
  • 데이터 접근을 위해 사용자 이름과 비밀번호를 요구하는 경우 사용됨
  • FTP 서버가 많이 사용함
    • 사용자 이름과 비밀번호를 기술하지 않고 FTP URL에 접근하면, 기본 사용자 이름 값으로 'anonymous' 비밀번호는 브라우저마다 가지고 있는 기본값을 사용

경로
  • 리소스가 서버의 어디에 있는지 알려줌
    • 서버가 리소스의 위치를 찾는데 사용하는 정보
  • 유닉스 파일 시스템의 파일 경로와 유사
  • HTTP URL에서 경로 컴포넌트는 ‘/’ 문자를 기준으로 경로 조각으로 나뉨
    • 각 경로 조각은 자체만의 파라미터 컴포넌트를 가질 수 있음
파라미터
  • 애플리케이션이 서버에 정확한 요청을 하기 위해 필요한 입력 파라미터를 받는데 사용
  • 이름/값 쌍의 리스트로 URL 나머지 부분들로부터 ';' 문자로 구분하여 URL에 기술
    • http://www.google.com/image;name=cute
      - 이름은 ‘name’이고 값은 ‘cute’인 name=cute라는 하나의 파라미터 전달
    • http://www.google.com/hammers;sale=false/index.html;graphics=true
      - hammers 경로 조각은 값이 false인 sale 파라미터를 가짐
      - index.html 경로 조각은 값이 true인 graphics라는 파라미터를 가짐
질의 문자열
  • 데이터베이스 같은 서비스들은 요청받을 리소스 형식의 범위를 좁히기 위해서 질문이나 질의를 받을 수 있음
  • 게이트웨이를 가리키는 URL의 경로 컴포넌트와 함께 전달
    • 게이트웨이는 다른 애플리케이션에 접근하려고 할 때 거치는 통로라고 할 수 있음
  • 많은 게이트웨이가 '&'로 나뉘는 'key=value' 형식의 질의 문자열을 원함
프래그먼트
  • 리소스 내의 특정 부분(조각)을 가리킴
  • 일반적으로 HTTP 서버는 객체 일부가 아닌 전체만 다룸
    • 따라서, 클라이언트는 서버에 프래그먼트를 전달 X
    • 브라우저가 서버로부터 전체 리소스를 내려받은 후, 프래그먼트를 사용하여 보고자 하는 리소스의 일부를 보여줌
    • https://github.com/CodeDiary18/CodeDiary18#-my-github-stats-

📌출처: https://computer-science-student.tistory.com/523

 

[단독 URL]

  • 상대 URL
    • 리소스 안에 있는 리소스를 간결하게 기술하는데 사용한다.
    • 이때 상대 URL이 필요 정보를 얻기 위해서는 기저(base)라고 하는 다른 URL문을 사용해야 한다.
  • 절대 URL
    • 리소스에 접근하는데 필요한 모든 정보를 가지고 있다.
  • 기저 URL
    • 기저 URL은 상대 URL의 기준이 된다.
    • 기저 URL 찾는 방법
      1. 리소스에서 명시적으로 제공
        <base> HTML 태그를 기술할 수 있다. (base)
      2. 리소스를 포함하고 있는 기저 URL
        해당 리소스의 URL을 기저 URL로 쓸 수 있다.
      3. 기저URL이 없는 경우
        불안전하거나 깨진 URL일 수도 있다.

 

[URL 확장]

  • 어떤 브라우저들은 입력하는 동안에 자동으로 URL 확장을 한다.(이때 2가지로 나뉜다.)
    • 호스트명 확장
      • 브라우저 휴리스틱 사용만으로 확장을 돕는다.
    • 히스토리 확장
      • 과거 사용한 URL을 저장한 것을 사용해서 확장한다.

 

[안전하지 않은 문자]

SMTP로 특정 문자를 제거하는 전송방식을 사용해 안전한 전송을 위해 URL 설계를 한다.(현재도 이를 사용한다.)

  • URL 문자 집합
    • 영어 중심 설계로 다양한 언어를 지원하기 위해서 ASCII는 지원하지 않아 이스케이프 문자를 사용해 쓰도록 설계한다. 
  • 인코딩 체계
    • URL에서 안전하지 않다고 여기는 문자를 % ~ 16 진수 숫자로 이루어진 이스케이프 문자로 바꿔준다.
  • 문자 제한
    • 선정되었거나 사용제한된 문자들이 있다.

 

[URN vs URL]

URN은 지금 잘 쓰지 않지만 경로가 바뀌어도 이름만 보고 찾아갈 수 있다는 장점이 있기 때문에 이를 개발하고 있다고 한다. 그러나 URL을 너무 많이 쓰고 있어서 한번에 이를 바꾸기는 매우 ~어렵다고 한다.