웹개발을 위한 HTTP 기초 지식

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

codewalker 2021. 4. 6. 20:33

[1] URI (Uniform Resource Identifier)

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

URI는 URL과 URN을 포함하는 개념

 

[2] URL (Uniform Resource Locator) / URN (Uniform Resource Name)

  • URL - Locator: 리소스가 있는 위치를 지정
  • URN - Name: 리소스에 이름을 부여
  • Locator는 변할 수 있지만 Name은 변하지 않는다.
  • Name만으로 실제 리소스를 찾을 수 있는 방법이 보편화 되지 않아서 대부분 URL을 사용한다.

 

URL과 URN

 

[3] URL 문법 해석

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

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

(해석)

  • 프로토콜: https
    • scheme 부분은 주로 프로토콜 사용 
    • 프로토콜이란 어떤 방식으로 자원에 접근할 것인가 하는 규칙을 말함
    • 프로토콜 종류 - http, https, ftp 등

 

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

 

  • 호스트명: www.google.com
    • 도메인명 또는 IP 주소를 직접 사용 가능함

 

  • 포트 번호: 443
    • 접속 포트(PORT)
    • http는 80, https는 443 등으로 일반적으로 생략함

 

  • 경로(path): /search
    • 계층적 구조를 가지는 리소스 경로

 

  • 쿼리 파라미터: ?q=hello&hl=ko
    • ?로 시작하는 key=value 형태를 가지고, &로 추가 가능함
    • Query Parameter 또는 Query String 으로 불림

 

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

 

 

[4] 웹 브라우저 요청 흐름

  • https://www.google.com:443/search?q=hello&hl=ko
  1. 사용자가 위의 URL로 요청을 하면 DNS 서버에서 https://www.google.com 에 맞는 IP 주소와 포트 번호를 조회한다.
  2. 경로와 쿼리를 해석해서 요청 방식, 쿼리, HTTP 버전, 호스트 정보 등이 담긴 HTTP 요청 메세지를 만든다.
  3. Socket 라이브러리로 3 way handshake를 통해 서버와 연결하고, TCP/IP 계층으로 데이터를 전달한다.
  4. TCP/IP 계층에서 HTTP 요청 메세지를 포함한 TCP/IP 패킷을 생성한다.
  5. 인터넷 망을 통해서 구글 서버로 요청 패킷을 전송한다.
  6. 서버는 패킷 안에 있는 메세지를 해석해서 버전, 상태, 컨텐츠 정보, html 정보 등이 담긴 HTTP 응답 메세지를 생성한다.
  7. 생성한 HTTP 응답 메세지를 TCP/IP 패킷으로 감싸고 클라이언트(사용자)에게 전송한다.
  8. 응답 패킷을 받으면 웹 브라우저가 HTTP 응답 메세지를 확인한 후 html 렌더링하여 사용자 화면에 출력한다.

클라이언트에서 서버로 데이터를 전송하는 과정
왼쪽은 서버에 전달할 데이터(요청), 오른쪽은 클라이언트에 전달할 데이터(응답)

 

 

 

 

[출처] "(인프런) 모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한" 강의를 듣고 내용을 정리함.

'웹개발을 위한 HTTP 기초 지식' 카테고리의 다른 글

[HTTP] 6. HTTP 상태 코드  (0) 2021.04.07
[HTTP] 5. HTTP 메서드 활용  (0) 2021.04.07
[HTTP] 4. HTTP 메서드  (0) 2021.04.07
[HTTP] 3. HTTP 기본  (0) 2021.04.06
[HTTP] 1. 인터넷 네트워크  (0) 2021.04.06