구리

[네트워크] HTTP에 대해 (2) - URI, 웹 브라우저 요청 흐름 본문

네트워크

[네트워크] HTTP에 대해 (2) - URI, 웹 브라우저 요청 흐름

guriguriguri 2023. 6. 9. 22:51

HTTP에 대해 공부하며 정리한 글입니다.

 

1. URL

이름이 비슷하며 헷갈릴 수 있는 URI, URL, URN에 대해 알아봅니다.

URI, URL, URN이란?

  • URI(Identifier) - 자원을 식별 (서울 사는 김철수)
  • URL(Locator) - 리소스의 위치를 지정 (서울)
  • URN(Name) - 리소스 이름을 부여 (김철수)

자원의 위치는 변할 수 있지만 이름은 변하지 않으며 URN 이름만으로는 실제 리소스를 찾을 수 있는 방법이 보편적이지 않습니다.

 

Q) 그런데 주소창에는 URL만 검색해도 원하는 자원을 얻을 수 있습니다. 위의 개념대로라면 주소창에는 URL + URN을 같이 입력해야 하지 않을까요? 만약 URL에 여러 자원이 존재한다면 서버는 정확히 어떤 자원을 원하는지 어떻게 알 수 있을까요?

더보기

URL은 자원의 위치를 나타내는 주소입니다. 예를 들어, "https://www.example.com/images/picture.jpg"라는 URL은 이미지 파일인 "picture.jpg"가 "https://www.example.com/images/"라는 위치에 있는 것을 나타냅니다. URL은 특정 자원의 위치를 지정하는 역할을 합니다.

하지만 검색 엔진은 URL만으로도 자원을 검색할 수 있습니다. 이는 검색 엔진이 URL을 통해 웹 페이지를 크롤링하고 색인화하기 때문입니다. 검색 엔진은 URL의 경로, 쿼리 매개변수 등을 분석하여 해당 자원을 식별하고 색인에 포함시킵니다.

물론, URL만으로는 특정 자원을 완전히 고유하게 식별할 수 없을 수도 있습니다. 예를 들어, 같은 URL에 여러 자원이 존재할 수도 있습니다. 이럴 경우에는 URN을 추가하여 정확한 자원을 식별할 수 있습니다. URN은 자원의 고유한 이름을 나타내며, URL과는 달리 자원의 위치와는 관련이 없습니다.

따라서, 정확한 자원을 얻기 위해서는 검색창에 URL과 URN을 함께 입력하는 것이 유용할 수 있습니다. 그러나 보편적으로는 검색 엔진이 URL만으로도 많은 자원을 검색할 수 있으므로, 대부분의 경우 URL만으로도 원하는 자원을 찾을 수 있습니다.

 

 

URI (Uniform Resource Identifier)

URI는 URL과 URN을 포함하는 개념으로 리소스를 식별하기 위해 존재합니다. 

  • Uinform - 리소스를 식별하는 통일된 방식
  • Resource - 자원을 의미하며 URI로 식별할 수 있는 모든 것
  • Identifier - 다른 항목과 구분하는데 필요한 정보

 

URL 구조

scheme://[userinfo@]host[:port][/path][?query][#fragment]

// 예시
https://www.google.com:443/search?q=hello&hl=ko
  • scheme (https)
    • 주로 프로포콜 정보를 사용합니다.
  • userinfo
    • URL에 사용자 정보를 포함해서 인증하는 역할로 거의 사용하지 않습니다.
  • host (www.google.com)
    • 호스트명으로 보통 도메인명 또는 IP 주소를 직접 사용합니다.
    • 참고로 호스트명은 도메인명의 한가지 유형으로 도메인명중 IP 주소를 설정할 수 있는 이름이 호스트명입니다.
  • port (443)
    • 접속 포트 번호를 의미하며 일반적으로 포트 번호는 생략할 수 있습니다.
    • 생략시 http는 80, https는 443입니다.
  • path (search)
    • 리소스 경로를 의미하며 일반적으로 계층적 구조로 URL path를 설계합니다.
  • query (q=hello&hl=ko)
    • 웹서버에 제공하는 파라미터입니다.
    • key=value 형태로, 쿼리는 ?로 시작하며 쿼리 스트링, 쿼리 파라미터라고도 부릅니다.
  • fragment
    • html 내부 북마크 등에 사용되며 서버에 전송하는 정보는 아닙니다.
    • 페이지의 특정 요소를 지시하는 역할로 해당 url 페이지에서 해시태그로 지시한 id 요소를 스크롤 이동 없이 확인할 수 있습니다.
    • 보통 여러 컨텐츠가 나열된 페이지의 특정 위치 정보를 사용자에게 함께 전달할 때 사용됩니다.

 

 

2. 웹 브라우저 요청 흐름

URL에 주소를 입력하고 이동시 다음과 같은 과정이 진행됩니다.

  1. DNS를 통해서 IP를 획득하고, PORT 생략시 scheme을 통해 PORT를 찾아냅니다. (참고로 DNS와 통신하는 과정에서는 UDP를 사용하며 3 way handshake가 일어나지 않습니다.)
  2. 웹 브라우저는 HTTP 요청 메세지를 생성합니다.
  3. SOCKET 라이브러리를 통해 전송 계층으로 전달합니다. (SOCKET은 응용 계층과 전송 계층 사이의 연결고리 (소프트웨어 인터페이스) 역할을 합니다.)
  4. OS에서는 3 way handshake를 통해 서버와 클라이언트 간의 연결을 확인한 후 HTTP 메세지를 포함하는 TCP/IP 패킷을 생성합니다. 
  5.  그리고 네트워크 인터페이스로 패킷을 전달 후 해당 인터넷 망을 통해 서버로 패킷을 전송합니다.