본문 바로가기

Study/Computer Science

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

※ 포스팅 내용의 모든 출처는 아래 링크와 같습니다. 작성 내용 오류에 대한 피드백을 환영합니다.

복습을 목적으로 작성한 포스팅이며, 비상업적 목적임을 알립니다.

 

출처: www.inflearn.com/course/http-웹-네트워크/dashboard

 

모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의

실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., 웹 기술을 사용하는 개발자라면 누구나 OK!꼭 필요한 HTTP의 핵심을 알려드립니다. 📣 확인해주세요!본 강의는 자바 스

www.inflearn.com

URI(Uniform Resource Identifier)

  • URI 정의

    - 로케이터(Locator), 이름(Name) 또는 둘 다 추가로 분류될 수 있음

    - 쉽게 생각하면 URI는 URL과 URN의 상위개념임

  • 단어 뜻

    - Uniform : 리소스를 식별하는 통일된 방식

    - Resource : 자원, URI로 식별될 수 있는 모든 것

    - Identifier : 다른 항목과 구분하는데 필요한 정보

  • URL : Uniform Resource Locator

  • URN : Uniform Resource Name

URL

  • Resource Locatr
  • 리소스가 있는 위치 지정
  • 위치는 변할 수 있으나, 이름은 변하지 않음
  • ex ) foo://example.com:8042/over/there?name=ferret#nose

URN

  • Resource Name

  • 리소스에 이름 부여 
  • URN 이름만으로 실제 리소스를 찾을 수 있는 방법이 보편화 되지 않음
  • ex ) urn:example:annimal:ferret:nose

URL 분석

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

 

  • URL 전체 문법

    sheme://[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

(1) URL : Scheme

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

 

  • 주로 프로토콜 사용

  • http는 80포트, https는 443 포트를 주로 사용 (포트 생략 가능)

  • https = http + 보안
프로토콜
- 어떤 방식으로 자원에 접근할 것인가를 약속하는 규칙
- ex. http, https, ftp 등

(2) URL : Userinfo

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

 

  • URL에 사용자 정보를 포함해 인증

  • 거의 사용하지 않음

(3) URL : host

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

 

  • 호스트명

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

(4) URL : PORT

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

 

  • 접속 포트

  • 일반적으로 생략하며, 생략시 http는 80, https는 443

  • 특정 서버에 접근할 경우에는 입력함

(5) URL : Path

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

 

  • 리소스 경로(path), 계층적 구조임

(6) URL : Query

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

 

  • key=value 형태

  • ? 로 시작, &로 추가가 가능함

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

(7) URL : Fragment

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

 

  • html 내부 북마크 등에 사용됨

  • 서버에 전송하는 정보 아님

웹 브라우저 요청 흐름

  • URL에서 host의 DNS를 조회한 뒤, PORT를 확인해 HTTP 요청 메시지를 생성함

    HTTP 요청 메시지 예시
GET /search?q=hello&hl=ko HTTP/1.1
HOST: www.google.com

HTTP 메시지 전송

  • HTTP 메시지 전송

    (1) 웹 브라우저가 HTTP 메시지 생성

    (2) SOCKET 라이브러리를 통해 전달

        (a) TCP/IP 연결 (IP, PORT)  => TCP 3 way handshake

        (b) 데이터 전달

    (3) TCP/IP 패킷 생성, HTTP 메시지 포함

    (4) 네트워크 인터페이스에서 LAN을 지나 인터넷을 통해 서버로 전달

  • 수신 받은 메시지는 HTTP 메시지만 꺼내어 해석한 뒤 응답 메시지 전송

  • 클라이언트는 응답 받은 메시지의 HTML을 렌더링함