(HTTP) 모든 개발자를 위한 HTTP 웹 기본 사항_섹션 2 요약

이 글은 김영한님이 작성하셨습니다. 모든 개발자를 위한 HTTP 웹 기초 강의를 듣고 작성한 글입니다. 오타나 부정확한 내용이 있으면 언제든지 알려주세요! 감사합니다.

URI 및 웹 브라우저 요청 흐름

URI(Uniform Resource Identifier)

URL은 자원을 식별하는 통일된 방법입니다.

? 너? 너N? 이 세 가지의 차이점은 무엇입니까?

“URI는 로케이터, 이름 또는 둘 다로 더 분류될 수 있습니다.”


  • URI라는 큰 개념이 있습니다. 자원 식별 예) 주민등록번호를 지정합니다.
  • URL: 리소스 로케이터, 리소스 위치, 예: B. 내 위치
  • URN: 리소스 이름, 리소스 이름, 예: B. 나 자신
  • 웹 브라우저에 URL을 작성합니다!
  • URN은 실명을 부여합니다!
  • 문제는 이름을 지어도 찾을 수 없다는 점이다. 따라서 거의 URL만 사용됩니다.

URI

  • niform: 리소스를 식별하기 위한 균일한 방법
  • 아르 자형esource: 리소스, URI로 식별할 수 있는 모든 것(제한 없음)
    • B.) 웹 브라우저의 HTML 파일, 실시간 교통 정보, 구분할 수 있는 모든 것.
  • 식별자: 다른 항목과 구별하기 위해 필요한 정보
    • 예) 주민등록번호

URL(균일하게 아르 자형자원 ocator), URN(균일하게 아르 자형자원 N오전)

  • URL – 로케이터: 리소스의 위치를 ​​나타냅니다.
  • URN – 이름: 리소스에 이름을 부여합니다.
  • 위치는 변경할 수 있지만 이름은 변경할 수 없습니다.
  • URN 이름만으로 실제 리소스를 찾는 보편적인 방법은 없습니다.
    • 예) urn:isbn:8960777331 (책의 isbn URN)
    • 예) 책의 isbn을 검색해도 실제 책이 나오지 않는다.

URL을 분석해 봅시다!

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

URL

완전한 문법

  • scheme://(userinfo@)host(:port)(/path)(?query)(#fragment)
  • https://www.google.com:443/search?q=hello&hl=de
  • 프로토콜(https)
  • 호스트 이름(www.google.com)
  • 포트 번호(443)
  • 일어나다
  • 쿼리 매개변수(q=hello&hl=en)

URL

계획하다

  • 계획하다://(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 보안)
  • 현재 대부분의 웹사이트는 https를 통해 실행됩니다.

URL

사용자 정보

  • 계획하다://(사용자 정보@)host(:port)(/path)(?query)(#fragment)
  • https://www.google.com:443/search?q=hello&hl=de
  • URL에 사용자 정보를 포함하여 인증이 필요할 때 사용합니다.
  • 거의 사용하지 않습니다.

URL

주인

  • scheme://(사용자 정보@)주인(:포트)(/경로)(?쿼리)(#단편)
  • https://www.google.com:443/search?q=hello&hl=ko
  • 호스트 이름
  • 일반적으로 도메인 이름이나 IP 주소를 직접 입력할 수 있습니다.

URL

항구

  • 체계://(userinfo@)호스트(:항구)(/path)(?query)(#fragment)
  • https://www.google.com:443/search?q=hello&hl=ko
  • 항구
  • 연결 포트
  • 기본적으로 생략. 생략하면 http는 80이고 https는 443입니다.

URL

떨어져 있는

  • 체계://(사용자 정보@)호스트(:포트)(/떨어져 있는)(?Query)(#Fragment)
  • https://www.google.com:443/구하다?q=안녕하세요&hl=ko
  • 리소스가 있는 경로입니다.
  • 일반적으로 계층 구조를 가지고 있습니다.
  • 예)
    • /홈/file1.jpg
    • /구성원 -> 구성원 정보
    • /구성원/100, /items/iphone12

URL

문의

  • 체계://(사용자 정보@)호스트(:포트)(/경로)(?문의)(#파편)
  • https://www.google.com:443/search?q=안녕하세요&hl=de
  • 키=값 형식
  • ?로 시작하고 &로 추가 가능
    • 예) ?keyA=valueA&keyB=valueB
  • 일반적으로 쿼리 매개변수(웹 서버에 제공되는 매개변수 정보), 쿼리 문자열(모두 텍스트이기 때문에) 등으로 불립니다.
  • 웹 서버에 제공되는 매개변수, 텍스트 형식

URL

파편

  • scheme://(userinfo@)host(:port)(/path)(?query)(#파편)
  • https://docs.spring.io/spring-boot/docs/current/reference/html/getting-시작됨.html#시작-소개-스프링 부트
  • 잘 사용하지 않습니다.
  • 파편
  • HTML의 북마크에 사용됩니다.
  • 서버로 전송되는 정보가 아닙니다.

웹 브라우저 요청 흐름

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

  • 웹 브라우저는 먼저 Google 서버를 찾아야 합니다.
  • 먼저 DNS 서버에 쿼리합니다. -> IP 200.200.200.2, 포트 443(생략). IP 및 PORT 정보를 찾습니다.
  • 그리고 HTTP 요청 메시지를 생성합니다.

생성된 HTTP 요청 메시지


HTTP 메시지 보내기


  1. 웹 브라우저는 HTTP 메시지를 생성합니다.
  2. SOCKET 라이브러리를 통해 OS 계층의 TCP/IP 계층으로 전달되어야 합니다.
    • 찾은 IP와 PORT 정보를 통해 3-way handshake를 수행하여 Google 서버에 접속합니다.
    • 연결 후 데이터를 보냅니다.
  3. 데이터를 캡슐화하여 TCP/IP 패킷을 생성하고 HTTP 메시지를 포함합니다.
  4. 패키지 정보는 인터넷으로 유입됩니다.

패키지 생성


  • 전송 데이터는 웹 브라우저에서 생성됩니다.
  • 여기에는 HTTP 메시지가 포함됩니다.

클라이언트 패킷 포워딩

  • 생성된 패킷은 수많은 인터넷 노드를 통해 Google 서버로 전달됩니다.
  • 요청 패킷이 도착하면 Google 서버는 TCP/IP 패킷을 버리고 HTTP 메시지를 가져옵니다.
  • 검색된 HTTP 메시지를 구문 분석합니다. -> 검색어는 안녕하세요, 검색하러 오셨나요? 등

HTTP 응답 메시지


  • Google 서버에서 HTTP 응답 메시지를 생성합니다.
  • 콘텐츠 유형이 중요합니다. 예) 응답 데이터는 text/HTML 형식이고 언어는 UTF-8 문자 집합입니다.
  • Content-Length: 예) 실제 HTML 데이터의 길이

서버 패킷 포워딩

  • Google 서버도 같은 방식으로 응답 패킷을 생성하고 동일한 방식으로 TCP/IP 패킷으로 덮습니다.
  • 생성된 패키지는 수많은 인터넷 노드를 통해 클라이언트로 전달됩니다.
  • 클라이언트는 도착한 패킷에서 HTTP 메시지를 검사합니다.
  • HTML 데이터의 유효성이 검사되고 웹 브라우저가 HTML을 렌더링합니다.
  • HTML 결과를 확인합니다.