0. Introduction

  • HTTP에 관한 학습내용의 기본 출처: 김영한님의 모든 개발자를 위한 HTTP 웹 기본지식

  • 강의를 듣고 정리한 내용과 모르는 부분에 대한 추가 내용을 합쳐 올린다.

  • 이 강의는 HTTP에 대한 웹 기본지식을 설명하는 강의이므로, 내용이 간략할 수 있다.

  • 학습 이유: 프레임워크를 사용하여 웹 개발을 배우기 전에, HTTP에 대해 기본적인 지식을 알고 시작하고 싶어 HTTP 공부를 시작한다. 이 강의에 대해 공부 후, 네트워크 전반에 대해 공부한다.


1. URI

  • URI (Uniform Resource Identifier)란??

image

 

1.1 URI, URL, URN의 각 의미

  • URI의 단어 뜻

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

    • Locator: resource가 있는 위치를 지정한다.
  • URN

    • Name: resource에 이름을 부여한다.
    • urn:isbn:8960777331 (어떤 책의 isbn URN)
    • URN 이름만으로 실제 리소스를 찾을 수 있는 방법이 보편화 되지 않았다.
    • 위치는 변할 수 있지만, 이름은 변하지 않는다.
  • 그래서 앞으로 URI를 URL과 같은 의미로 이야기하겠다

image

 

1.2 URL 분석

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

 

1.2.1 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)

 

1.2.2 userinfo

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

  • URL에 사용자 정보를 포함해서 인증할 때 사용한다.
  • 하지만 거의 사용하지 않는다.

 

1.2.3 host

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

  • 호스트명이다.
  • domain 명 또는 IP 주소를 직접 입력한다.

 

1.2.4 PORT

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

  • 접속 포트
  • 일반적으로 생략한다. 생략시 http는 80, https는 443이다.

 

1.2.5 path

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

  • 리소스의 경로다.
  • 계층적 구조로 되어있다.
    • /home/file1.jpg
    • /members
    • /members/100, /item/iphone12

 

1.2.6 query

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

  • key = value 형태로 되어 있다.
  • ?로 시작하며 &로 추가 가능하다.
    • ex) ?keyA=valueA&keyB=valueB
  • query parameer, query string 등으로 불린다. 웹서버에 제공하는 파라미터, 문자형태다.
     

1.2.7 fragment

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

  • html 내부 북마크 등에 사용한다.
  • 서버에 전송하는 정보가 아니다.

2. 웹 브라우저 요청 흐름

다음 URL을 가지고 https://www.google.com:443/search?q=hello&hl=ko 웹 브라우저가 어떻게 요청해서 진행되는지 흐름을 파악해보자.

image

  1. DNS 조회: google.comd을 DNS에서 조회하여 해당 IP 주소를 찾는다.
  2. HTTPS PORT는 생략한다. 443
  3. HTTP 요청 메시지를 클라이언트가 생성한다. HTTP 요청 메시지는 다음과 같다.

image

그러면 ‘Introduction 1: Internet Network’ 에서 학습한 과정이 진행된다.

image

 

HTTP 메시지 전송

  1. resource 요청 시, Application layer에서 HTTP 메세지를 생성한다.
  2. 3 way handshake를 통해 socket에 연결한다.
  3. socket library를 통해 transport layer으로 데이터를 전송한다.
  4. transport layer에서 HTTP를 포함한 TCP 정보를 씌운다.
  5. Internet layer에서 TCP 정보를 포함하는 IP 패킷을 생성한다.

image

  1. 패킷이 도착하면 서버는 패킷 내부 HTTP method를 해석하여 정보에 맞는 동작을 한다.
  2. 서버에서 HTTP 응답 메세지를 생성한다.

image

  1. 클라이언트에서는 응답 메세지를 받아 HTML 렌더링을 한다.

image


Reference