CS/웹

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

pythaac 2022. 4. 7. 21:44

https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC

 

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

실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., - 강의 소개 | 인프런...

www.inflearn.com

  • URI
  • 웹 브라우저 요청 흐름

 

  • URI(Uniform Resource Identifier)
    • 리소스를 식별하는 통합된 방법
    • URI는 로케이터(Locator), 이름(Name) 또는 둘 다 추가로 분류될 수 있음
    • URL(Locator)
      - 리소스의 위치
    • URN(Name)
      - 이름
      - 그저 이름이기 때문에 위치를 찾을 수가 없음
      - 이로 인해 거의 URL만 사용
  • URI의 단어 뜻
    • Uniform
      - 리소스를 식별하는 통일된 방식
    • Resource
      - URI로 식별할 수 있는 모든 것 (제한이 없음, 웹 문서만 resource에 해당하는 것이 아님)
    • Identifier
      - 식별자
  • URL, URN의 단어 뜻
    • URL - Locator
      - 리소스가 있는 위치
    • URN - Name
      - 리소스의 이름
    • URN만으로 리소스를 찾는 방법이 보편화되어있지 않음
    • 따라서, URI와 URL은 엄밀히 다르지만, 같다고 볼 수도 있음
  • URL 분석
    • https://www.google.com/search?q=hello&hl=ko
    • scheme://[userinfo@]host[:port][/path/[?query][#fragment]
    • 프로토콜, 호스트명, 포트 번호, 패스, 쿼리 파라미터
  • scheme
    • 주로 프로토콜 사용
    • 프로토콜 : 어떤 방식으로 자원에 접근할 것인지 규칙
    • http는 80, https는 443 포트로 생략 가능
  • path
    • 리소스 경로
    • 계층적 구조로 이루어짐
    • /home/file1.jpg
    • /members/100
  • query
    • key=value 형태
    • &로 추가 : ?keyA=valueA&keyB=valueB
    • 쿼리 파라미터, 쿼리 스트링으로 부름
    • 웹 서버에 제공하는 파라미터라 하여 쿼리 파라미터
    • 다 문자형태로 넘어가기 때문에 쿼리 스트링
  • fragment
    • html 내부 북마크 등에서 사용
    • 서버에 전송하는 정보는 아님
  • 웹 브라우저 요청 흐름
    • https://www.google.com/search?q=hello&hl=ko 
    •  1. 서버를 찾아야함 (IP/Port)
      - DNS를 통해 IP를 찾음
      - https는 port가 443
    • 2. HTTP 요청 메시지 생성
      - GET /search?q=hello&hl=ko HTTP/1.1 Host: www.google.com
      - HTTP 메서드, path부터 URL, HTTP 버전, 호스트
    • 3. 소켓 라이브러리
      - TCP/IP 연결 : IP, Port 이용
      - TCP 계층으로 데이터 전달
    • 4. TCP
      - HTTP 메시지를 포함한 TCP/IP 패킷 생성
      - IP/Port 포함
    • 5. 인터넷으로 전송
      - 인터넷의 라우터를 통해 서버로 전송
    • 6. 서버
      - 서버에서 HTTP 요청을 해석
      - path는 /search, 쿼리 스트링은 q가 hello, hl이 ko
      - 요청에 맞는 처리 (hello가 포함된 한국어 검색)
    • 7. HTTP 응답 메시지 생성
      - HTTP/1.1 200 OK Content-Type: text/html;charset=UTF-8 Content-Length: 3423
      - <html><body>...</body></html>
      - HTTP 버전, status code, Content Type, Content Length, Body
    • 8. 인터넷으로 전송
      - 인터넷 라우터를 통해 클라이언트로 전송
    • 9. html 렌더링
      - 응답에 포함된 html 문서를 렌더링