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

헤일리의 개발 일지·2024년 4월 2일

URI(Uniform Resource Identifier)

URI는 로케이터(locator), 이름(name) 또는 둘다 추가로 분류될 수 있습니다.
로케이터는 뭐고, 이름은 또 무엇일까요?

사진과 같이 URI라는 가장 큰 개념이 있습니다. 이는 리소스를 식별합니다.

그 안에 크게 두가지가 있습니다.
첫번째는 URL로 리소스의 위치를 나타냅니다.
두번째로 URN은 리소스의 이름을 나타냅니다.

URI

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

URL, URN

  • URL - Locator: 리소스가 있는 위치를 지정
  • URN - Name: 리소스에 이름을 부여
  • 위치는 변할 수 있지만, 이름은 변하지 않는다.

이름이 변하지 않으면 좋아보일 수 있는데요,
그러다 URN 이름만으로 실제 리소스를 찾을 수 있는 방법이 보편화되어 있지 않습니다.

즉, URI, URL만 기억하셔도 좋을 것 같습니다.

URL

전체 문법
scheme://[userinfo@]host[:port][/path][?query][#fragment]

scheme

  • 주로 프로토콜 사용
  • 프로토콜이란 어떤 방식을 자원에 접근할 것인가 하는 약속 규칙 ex) http, https
  • http는 80 포트, https는 443 포트를 주로 사용하며, 포트는 생략 가능

userinfo

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

host

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

port

  • 접속 포트
  • 일반적으로 생략

path

  • 리소스 경로
  • 보통 계층적 구조로 되어 있음

query

  • key=value 형태
  • ?로 시작, &로 추가 가능 ex) ?keyA=valueA&keyB=valueB
  • query parameter, query string 등이라고도 불림

fragment

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

웹 브라우저 요청 흐름

url을 입력했을 때, 어떤 식으로 흐름이 진행되는지 살펴봅시다.

우선 구글 서버를 찾기 위해 DNS를 조회합니다.
그리고 HTTP 요청 메시지를 생성합니다.

Http 메시지가 생성되면, 이는 SOCKET 라이브러리를 통해 서버랑 연결을 하고, 데이터를 전달합니다.
그런 다음 데이터에 패킷을 씌웁니다.
패킷에는 IP, Port 정보, HTTP 메시지가 들어있어 이 정보들에 따라 인터넷으로 흘러갑니다.

서버가 이 패킷을 받으면 해석 후 http 응답 메시지를 만들어 냅니다.

그리고 tcp 패킷을 씌워서 전달합니다.

이 패킷을 전달 받으면 분해하고 html 렌더링을 하여, 그 결과를 우리가 보게 됩니다.

0개의 댓글