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

2024. 12. 11. 20:20·HTTP

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 웹 기본 지식>

'HTTP' 카테고리의 다른 글

[HTTP] HTTP 상태 코드  (2) 2024.12.15
[HTTP] HTTP 메서드 활용 | 정적 / 동적 데이터 | HTML Form | HTTP API  (3) 2024.12.15
[HTTP] HTTP Method  (3) 2024.12.12
[HTTP] 모든 것이 HTTP | HTTP Message  (2) 2024.12.12
[인터넷 네트워크] IP | TCP/UDP | PORT | DNS  (1) 2024.12.11
'HTTP' 카테고리의 다른 글
  • [HTTP] HTTP 메서드 활용 | 정적 / 동적 데이터 | HTML Form | HTTP API
  • [HTTP] HTTP Method
  • [HTTP] 모든 것이 HTTP | HTTP Message
  • [인터넷 네트워크] IP | TCP/UDP | PORT | DNS
힐안
힐안
나 지금 학비 내면서 개발 독학하잖아.
  • 힐안
    후라이
    힐안
  • 전체
    오늘
    어제
    • 분류 전체보기 (59)
      • HTTP (9)
      • Spring (28)
        • 웹 게시판 (4)
      • Neural Network (1)
        • CNN (1)
        • RNN (0)
      • Deep Learning (6)
      • Audio (3)
      • 알고리즘(JAVA) (2)
      • 백준 (10)
        • Bronze (0)
        • Silver (2)
        • Gold (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    web
    자바
    springboot
    dcgan
    MVC
    Genrative_model
    최단경로알고리즘
    벨만포드
    티스토리챌린지
    JSON
    프레임워크
    웹
    HTTP
    GAN
    백엔드
    MNIST
    Spring
    백준
    비지도학습
    다익스트라
    플로이드와샬
    스프링부트
    딥러닝
    오블완
    API
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
힐안
[URI & 웹 브라우저 요청 흐름]
상단으로

티스토리툴바