(HTTP) URI와 웹 브라우저 요청 흐름

짜스의 하루 ·2024년 2월 28일

URI

1. URI? URL? URN?
1) URI(Unifrom Resource Identifier)
URI = URL + URN

Uniform : 리소스를 식별하는 통일된 방식
Resource : 자원 = URI로 식별할 수 있는 모든 것(제한 X)
Identifier : 다른 항목과 구분하는데 필요한 정보

2) URL(Unifrom Resource Locater), URN(Uniform Resource Name)
Locater: 리소스가 있는 위치를 지정
Name : 리소스에 이름을 부여

2. URL

전체문법
scheme://[userinfo@]host[:port][/path][?query][#fragment]
https://www.google.com:443/search?q=hello&hl=ko

  • 프로토콜(https)
  • 호스트명(www.google.com)
  • 포트 번호 (443)
  • 패스(/search)
  • 쿼리 파라미터(q=hello&hl=ko)

scheme
scheme://[userinfo@]host[:port][/path][?query][#fragment]
https://www.google.com:443/search?q=hello&hl=ko

  • 주로 프로토콜 사용
  • 프로토콜: 어떤 방식으로 자원에 접근할 것인가 하는 약속 규칙
    예) http, https, ftp 등등
  • http는 80포트, https는 443 포트를 주로 사용, 포트는 생략 가능
  • https는 http에 보안 추가 (HTTP Secure)

userinfo
scheme://[userinfo@]host[:port][/path][?query][#fragment]
htps://www.google.com:443/search?q=hello&hl=ko

  • URL에 사용자정보를 포함해서 인증
  • 거의 사용하지 않음

host
scheme://[userinfo@]host[:port][/path][?query][#fragment]
htps://www.google.com:443/search?q=hello&hl=ko

  • 호스트명
  • 도메인명 또는 IP주소를 직접 사용가능

port
scheme://[userinfo@]host[:port][/path][?query][#fragment]
htps://www.google.com:443/search?q=hello&hl=ko

  • 포트(PORT)
  • 접속 포트
  • 일반적으로 생략, 생략시 http는 80, https는 443

path
scheme://[userinfo@]host[:port][/path][?query][#fragment]
htps://www.google.com:443/search?q=hello&hl=ko

  • 리소스 경로(path), 계층적 구조
  • 예) /home/file1.jpg, /members, /members/100, /items/iphone12

query
scheme://[userinfo@]host[:port][/path][?query][#fragment]
htps://www.google.com:443/search?q=hello&hl=ko

  • key=value 형태
  • ?로 시작, &로 추가 가능 ?keyA=valueA&keyB=valueB
  • query parameter, query string 등으로 불림, 웹서버에 제공하는 파라미터, 문자 형태

fragment
scheme://[userinfo@]host[:port][/path][?query][#fragment]
https://docs.spring.io/spring-boot/docs/current/reference/html/getting-started.html#getting-started-introducing-spring-boot

  • fragment
  • html 내부 북마크 등에 사용
  • 서버에 전송하는 정보 아님

웹 브라우저 요청 흐름

  1. 웹 브라우저에 URL 입력

  2. IP, PORT 정보로 HTTP 요청 메세지 생성
    IP는 DNS를 조회해서 얻고, PORT는 생략되어 있으면 포로토콜(https)를 보고 유추한다.

<HTTP 요청 메세지>

  1. HTTP 메서드 전송
    SOCKET 라이브러리를 통해
    1) 헤더 부분에 IP, PORT 정보를 넣어 3way-handshake로 웹 브라우저(클라이언트)와 웹서버(서버)를 연결한다
    2) 연결이 되면, HTTP메시지를 TCP/IP 계층에 전달한다.

  2. 패킷 생성
    헤더 부분에 출발지 IP, PORT, 목적지 IP, PORT 정보등을 담고 데이터 부분에 HTTP 메시지를 담아 TCP/IP 패킷을 생성한다.

  3. 요청 패킷 전달
    TCP/IP 패킷이 웹 브라우저(클라이언트)에서 수많은 중간 노드를 거쳐 웹서버(서버)에 패킷을 전달한다.

  4. 서버에 요청 패킷 도착

  5. 서버에서 HTTP 응답 메시지 생성
    웹서버 (서버)에 도착한 패킷의 헤더 부분은 버리고 HTTP 메시지(데이터 부분)을 서버가 해석하여 HTTP 응답 메시지를 만든다
    <HTTP 응답 메시지>

  6. 서버에서 응답 패킷 전달
    헤더 부분에 출발지 IP, PORT, 목적지 IP, PORT 정보 등을 담고 데이터 부분에 HTTP 응답 메시지를 담아 만든 응답 패킷을 웹 브라우저(클라이언트)에 전달한다.

  7. 웹 브라우저에 응답 패킷 도착

  8. 웹 브라우저 HTML 렌더링
    웹 브라우저(클라이언트)가 웹 서버로부터 받은 응답 패킷에서 헤더 부분을 버리고 HTTP 응답 메시지의 데이터(HTML)을 렌더링하여 화면에 뿌려준다.

<웹브라우저 요청 흐름 정리>
웹 브라우저 = 클라이언트, 웹 서버 = 서버

1) 웹 브라우저에 입력된 URL로 부터 IP, PORT 정보를 얻고 웹 브라우저가 HTTP 요청 메시지를 생성한다.

2) 애플리케이션 계층의 소켓 라이브러리를 통해 IP, PORT 정보를 헤더 부분에 담아 연결을 위한 패킷을 만들고 3-way-handshake 로 웹 서버와 연결한다.

3) 소켓 라이브러리를 통해 HTTP 메시지를 TCP/IP 계층으로 전달한다

4) 헤더 부분출발지 IP, PORP, 목적지 IP, PORT등)과 데이터 부분(HTTP요청 메시지)를 합쳐 TCP/IP 패킷을 생성한다.

5) 웹 브라우저에서 인터넷망(수많은 노드들)을 거쳐 웹 서버로 패킷을 전달한다.

6) 웹 서버는 도착한 패킷의 헤더 부분은 버리고 데이터 부분(HTTP 요청 메시지)를 해석하여 HTTP 응답 메시지를 만든다.

7) 헤더 부분(출발지 IP, PORT, 목적지 IP, PORT 등)과 데이터 부분(HTTP 응답 메시지)을 합쳐 TCP/IP 응답 패킷을 생성한다.

8) 웹 서버에서 인터넷망(수많은 노드들)을 거쳐 웹 브라우저로 응답 패킷을 전달한다.

9) 웹 브라우저는 도착한 응답 패킷의 헤더 부분은 버리고 HTTP 응답 메시지의 데이터(HTML)을 렌더링하여 화면에 뿌려준다.

profile
2024. 01. 02 ~ 백앤드 공부 시작, 2024. 04.01 ~ 프론트 공부 시작

0개의 댓글