# URI (Uniform Resrouce Identifier)

  • URI
    • Uniform: 리소스를 식별하는 통일된 방식
    • Resource: 자원, URI로 식별할 수 있는 모든 것
    • Identifier: 다른 항목과 구분는데 필요한 정보
  • URI(Uniform Resource Identifier)는 자원을 식별하는 가장 큰 개념이며, 아래 두 가지로 분류된다.
    • URL(Uniform Resource Locator): 자원의 위치로 식별 (예: https://example.com/index.html)
    • URN(Uniform Resource Name): 자원의 이름으로 식별 (예: urn:isbn:0451450523)
    • 실제로 URN은 거의 사용되지 않으며, 현실에서 URI는 URL과 거의 동일한 의미로 쓰인다.
  • URL은 다음과 같이 구성된다.
구성요소 예시 설명
scheme https 프로토콜 (http, https, ftp 등)
authority www.example.com:8080 호스트(도메인 또는 IP) + 포트
path /search/item 자원의 경로
query ?sort=asc&page=1 서버에 전달하는 추가 파라미터 (key=value 형식)
fragment #section-2 문서 내 특정 위치 앵커 (서버에 전송되지 않음)

# URL 각 구성

  • scheme://[userinfo@]host[:port][/path][?query][#fragment]
  • Scheme
    • 주로 프로토콜을 사용하며, 어떤 방식으로 자원에 접근할지에 대한 약속 (http, https, ftp 등)
  • UserInfo
    • URL에 사용자 정보를 포함하여 인증하는 요소
    • 거의 사용되지 않음
  • Host
    • 호스트명: 네트워크에서 특정 서버를 식별하는 이름
    • 도메인명 또는 IP 주소를 직접 사용 가능
  • Port
    • 접속 포트 정보
    • 일반적으로 생략하며, http는 80, https는 443이 기본값
  • Path
    • 리소스의 경로, 계층 구조를 가짐 (예: /home, /home/members)
  • Query
    • key=value 형태로 서버에 추가 파라미터를 전달
    • ?로 시작하고, &로 여러 쿼리를 연결 가능 (예: ?sort=asc&page=1)
  • Fragment
    • HTML 내부 북마크 등에 사용되며, 서버로 전송되지 않고 브라우저에서만 처리됨

# 웹 브라우저 요청 흐름

  1. 호스트명 + 포트 정보를 가지고 DNS 조회 → IP 주소 획득
  2. 웹 브라우저가 HTTP 요청 메시지 생성
    • 메서드(GET, POST 등), 호스트(HOST), 프로토콜 버전, 경로, 쿼리 등의 정보 포함
  3. 소켓 라이브러리를 통해 OS 계층으로 메시지 전달
  4. TCP 3-way handshake로 서버와 연결 수립
  5. TCP/IP 패킷 생성 (TCP 헤더 + IP 헤더로 메시지를 감싸 캡슐화)
  6. 네트워크 인터페이스를 통해 인터넷을 거쳐 서버로 전달
  7. 서버에서 HTTP 응답 메시지 생성 후 TCP/IP 패킷에 담아 클라이언트로 전달
  8. 브라우저에서 응답 데이터 수신 후 렌더링 처리