이론

HTTP - URI, 웹 브라우저 요청 흐름

오봉봉이 2022. 7. 31. 23:59
728x90

URI (Uniform Resource Identifier)

URI는 로케이터(locatoer), 이름(name) 또는 둘 다 추가로 분류될 수 있다.

  • URL
    • Resource Locator로 리소스의 위치 자체를 나타낸다.
  • URN
    • Resource Name으로 리소스의 이름을 나타낸다.

URL과 URN은 저런 형식으로 생겼다.
URL은 보통 우리가 적는 https://xxx.xxx.xxx의 형식이고, URN은 이름을 부여하는 형식이다.
문제는 URN을 사용했을 때 이름을 넣어서 결과가 나오려면 Resource가 매핑이 되어야 하는데, URN 방식으로 사용하면 찾기가 거의 불가능하다.

대부분은 URL을 사용한다.

URI 뜻

  • Uniform

    • 리소스를 식별하는 통일된 방식
  • Resource

    • 자원, URI로 실별할 수 있는 모든 것(제한이 없다)
  • Identifier

    • 다른 항목과 구분하는데 필요한 정보
  • URL : Uniform Resource Locator

    • 리소스가 있는 위치를 지정
    • 리소스가 있는 장소를 나타냄
  • URN : Uniform Resource Name

    • 리소스에 이름을 부여
    • 위치는 변할 수 있지만, 이름은 변하지 않는다.
    • 하지만, URN 이름만으로 실제 리소스를 찾을 수 있는 방법이 보편화 되지 않았다.

분석

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

scheme

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

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

  • 주로 프로토콜 사용

  • 프로토콜 : 어떤 방식으로 자원에 접근할 것인가 하는 약속 규칙

    • http, ftp 등
  • http는 80, https는 443 포트를 주로 사용, 포트는 생략 가능하다.

userinfo

host

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

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

  • 호스트명

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

port

path

query

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

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

  • key=value 형태

  • ?로 시작하고, &로 추가 가능하다.

    • ?keyA=valueA&keyB=valueB
  • query parameter, query string 등으로 불린다.

  • 웹서버에 제공하는 파라미터, 문자 형태

fragment

웹 브라우저 요청 흐름

https://www.google.com/search?q=hello&hl=ko라는 값을 브라우저에 입력하면


DNS를 조회해서 IP를 찾고 포트 정보를 찾아내어 HTTP 요청 메시지를 생성한다.


HTTP 요청 메시지는 위와 같이 생겼다.


HTTP 메시지를 생성했으면 SOCKET 라이브러리를 통해 TCP/IP로 연결하고(TCP 3 way handshake) 연결 후 데이터를 전달한다.
TCP/IP에서 HTTP 메시지를 포함한 패킷을 생성하고 인터넷을 통해 전송한다.

패킷 모양은 아래와 같다.


전달 과정


서버에서 요청 패킷을 전달 받고 패킷을 TCP/IP 패킷은 버리고 HTTP 메시지만 해석해서 데이터를 찾아서 HTTP 응답 메시지를 만들어서 전달한다.

응답 과정



응답 메시지에는 HTTP 문서에 대한 정보가 있었기 때문에 TCP/IP 패킷은 버리고 HTTP 메시지만 해석해서 HTTP 문서를 렌더링해서 유저에게 보여준다.

인프런 김영한 지식 공유자님의 강의 - 모든 개발자를 위한 HTTP 웹 기본 지식
728x90