후라이

[URI & 웹 브라우저 요청 흐름] 본문

HTTP

[URI & 웹 브라우저 요청 흐름]

힐안 2024. 12. 11. 20:20

1. URI(Uniform Resource Identifier)

1.1) URI? URL? URN?

URI와 URL의 개념을 헷갈릴 수 있어 이 개념을 먼저 잡고 가자.

 

"URI는 로케이더(Locator), 이름(Name) 또는 둘 다 추가로 분류될 수 있다."

 

 

쉽게 말해, URI가 가장 큰 개념 이다. 이 URI는 결국엔 주민번호로 사람을 식별하듯이 소스를 식별한다.

- URL(Resource Locator) : 차은우가 어디있다.

- URN(Resource Name) : 차은우다.

이런 식으로 이해하면 편하겠다!

 

하지만 알아야할 것은, 위치는 변할 수 있지만, 이름은 변하지 않는다.

그리고 URN 이름만으로 실제 리소스를 찾을 수 있는 방법이 보편화되지도 않았다.

 

1.2) URL(=URI)

그럼 이제 그냥 URI와 URL을 같은 의미로 이야기하겠다.

 

전체 문법이 아래와 같다.

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

그리고 아래는 위 문법을 따른 실제 URL 주소이다.

https://www.google.com:443/search?q=hello&hl=ko

 

<문법 설명>

 

  • https는 알다시피 프로토콜이다. (프로토콜 : 어떤 방식으로 자원에 접근할 것인가의 "규칙") ex) http, https, ftp 등
  • 위 예시 주소에는 생략되어 있지만, [userinfo@]가 있다.
    이는 URL에 사용자 정보를 포함해서 인증하는 것으로 거의 사용하지 않는다.
  • www.gmail.com은 은 호스트명이다.
    도메인 명 또는 IP 주소를 직접 사용할 수 있다.
  • 443은 포트번호이다. 포트번호에 대해서는 이전 게시글에서 설명했다.
    주로, http는 80 포트, https는 443 포트를 사용하며, 포트는 생략 가능하다.
  • /search는 패스 (path) 이다. 이 리소스 경로는 계층적 구조로 우리가 디렉토리를 타고 파일 경로를 위치하듯이 표현한다.
    ex) /home/file1.jpg
  • q=hello&hl=ko는 query이다.
    key=value 형태이며, ?로 시작한다. 그리고 &으로 쿼리를 추가할 수 있다.
    queery parameter, query string 등으로 불리며, 웹 서버에 제공하는 파라미터이다.
  • 위 예시에는 나오지 않지만 [#fragment] 도 있다.
    잘 사용하진 않지만, html 내부에서 이동할 때 주로 사용한다.
    >> html 내부 북마크 등에 사용되며 서버에 전송하는 정보는 아니다.

2. 웹 브라우저 요청 흐름

 

 

웹 브라우저인 클라이언트가 위와 같은 URL을 요청한다고 하자.

그럼, 클라이언트 단에서는 서버에 보낼 HTTP 요청 메시지를 생성해서 보낸다.

해당 메시지는 

GET /search?q=hello&hl=ko HTTP/1.1
Host: http://www.google.com

이렇게 생겼다. (HTTP 메시지는 이 다음 글에서 설명)

 

 

 

 

  1. HTTP 메시지 생성 (Application 계층)
    웹 브라우저는 사용자가 입력한 URL이나 웹 페이지 요청에 따라 HTTP 요청 메시지를 생성한다.
    • 요청 메시지는 아래와 같다. (이 다음 글에 메시지 형식 자세히 설명)
      GET /search?q=hello&hl=ko HTTP/1.1
      Host: http://www.google.com
  2. SOCKET 인터페이스를 통해 데이터 전달 (Transport 계층)
    • HTTP 메시지는 소켓 라이브러리를 통해 전달된다.
    • 여기서 TCP 프로토콜이 사용됩니다. TCP는 신뢰성 있는 데이터 전송을 보장하기 위해 HTTP 메시지를 세그먼트(segment)로 분할하고, 각 세그먼트를 재조립할 수 있는 메커니즘(예: 순서 번호)을 추가한다.
    • 브라우저는 서버의 IP 주소포트 번호를 사용해 TCP 연결을 설정한다.(일반적으로 포트 80은 HTTP, 포트 443은 HTTPS에 사용).
  3. TCP/IP 패킷 구성 (Internet 계층)
    • TCP 세그먼트는 IP 패킷으로 감싸진다.
    • IP 계층에서는 목적지 서버의 IP 주소를 포함한 라우팅 정보를 추가한다.
  4. 데이터 전송 (Network Interface 계층)
    • IP 패킷은 물리적 네트워크(예: 이더넷, Wi-Fi)를 통해 서버로 전송된다.
    • 이 과정에서 IP 패킷은 프레임(frame)으로 감싸져 실제 전송 매체로 전달된다.
  5. 서버 측의 처리
    • 서버는 수신된 프레임을 IP 패킷으로 복원하고, TCP 계층에서 메시지의 순서를 확인한 뒤 이를 애플리케이션 계층(HTTP 서버)으로 전달한다.
    • HTTP 서버는 요청 메시지를 처리하고, 응답 메시지를 생성하여 동일한 과정을 역으로 거쳐 클라이언트로 보낸다. HTTP 응답 메시지는 아래와 같다.
      HTTP/1.1 200 OK
      Content-Type: text/html;charset=UTF-8
      Content-Length: 3423
      <html>
       <body>...</body>
      </html>

 

이렇게 보내진 요청 패킷은 서버단에 보내져 돌아올 때도 

 

똑같은 과정으로 응답 메시지가 만들어진다.

 

 

[참고] : 인프런-김영한 <모든 개발자를 위한 HTTP 웹 기본 지식>