[NETWORK] HTTP를 알아보자 (1)

HTTP 기초

URI

서버 리소스 이름으로 통합 자원 식별자(Uniformed Resource Identifier)로 불린다. 인터넷 우편 주소의 개념으로 정보 리소스를 고유하게 식별하고 위치를 지정할 수 있다. URI에는 두 가지가 있는데

URL (Uniformed Resource Locator)

특정 서버의 한 리소스에 대한 구체적인 위치 서술. 대부분 세 부분으로 이루어진 표준 포맷을 따르는데

  • scheme : 리소스에 접근하기 위해 사용되는 프로토콜 (ftp://, http:// … )
  • 서버의 인터넷 주소 (www.google.com)
  • 웹 서버의 리소스 (/play/index.html)

URN (Uniformed Resource Name)

리소스 위치에 영향받지 않는 유일무이한 이름 역할. 리소스 이름이 변경되지 않는 한 특정 프로토콜에 종속되지 않고 여러 프로토콜에서 접속이 가능하다. 단, 인프라가 아직 구축되지 않아 대중화되지는 않은 모양. 알고만 있자.

HTTP는 어떻게 우리에게 리소스를 전달할까?

앞선 포스트에서 정리한 TCP(참고 : TCP/IP를 간략하게 알아보자)에 기반해 http는 동작한다. TCP는 서버 IP 주소포트 번호로 데이터를 식별하는데, HTTP는 어떻게 서버 IP 주소와 포트번호를 알려줄까?

답은 URL이다. URL은 리소스에 대한 주소이고, 이를 통해 리소스를 가지고 있는 위치의 IP 주소와 포트 번호를 알려준다.

  • http://202.23.234.23:80/index.html : 아이피 주소와 포트 번호를 직접 알려주기도 하고
  • http://google.com:80/index.html : 호스트 네임과 포트 번호를 알려주기도 하고
  • http://google.com : 일반적으로 볼 수 있듯이 포트 번호를 생략할수도 있다. (생략 시 포트 기본값 80이라고 가정한다)

과정을 간략히 정리해보면 이렇게 된다.

  • 웹 브라우저가 서버 URL에서 호스트 네임을 추출한다
  • 웹 브라우저가 호스트 네임IP로 변환한다 (DNS 이용)
  • 웹 브라우저가 URL에서 포트번호를 추출한다
  • 웹 브라우저가 웹 서버와 TCP 커넥션을 맺는다
  • 웹 브라우저가 웹 서버에 HTTP 요청을 보낸다
  • 웹 서버는 웹 브라우저에 HTTP 응답을 보낸다
  • 커넥션이 닫히고, 웹 브라우저가 문서를 보여준다

기본적인 웹의 구성요소

프락시

클라이언트와 서버 사이에 위치한 HTTP 중개 역할

  • 클라이언트와 서버 사이에 위치해 클라이언트의 모든 HTTP 요청을 받아 서버에 전달
  • 요청과 응답을 필터링하며, 주로 보안을 위해 사용됨

캐시

많이 찾는 웹페이지를 클라이언트에 보관하는 창고

  • 웹 캐시, 캐시 프락시가 자신을 거쳐가는 문서들 중 자주 찾는 것의 사본을 저장

게이트웨이

다른 애플리케이션과 연결된 웹 서버

  • 다른 서버와의 중개자 역할
  • 주로 HTTP 트래픽을 다른 프로토콜로 변환하기 위해 사용
  • 예를 들어, HTTP/FTP 게이트웨이는 FTP URI에 대한 HTTP 요청을 받아들인 뒤, FTP 프로토콜을 이용해 문서를 가져옴. 받아온 문서는 HTTP 메시지에 담겨 클라이언트에게 보냄

터널

단순히 HTTP 통신을 전달하기만 하는 프락시

  • 주로 비 HTTP 데이터를 하나 이상의 HTTP 연결을 통해 그대로 전송해주기 위해 사용
  • 이게 무슨 말이냐면
    • HTTPS를 보면, 이건 HTTP 프로토콜이 아니라 암호화된 SSL 프로토콜 기반 위에서 동작하는 것임
    • 그러면 이 암호화된 SSL 트래픽을 어떻게 전달할 것이냐? 라는 문제가 있는데
    • 우선 HTTP/SSL 터널이 HTTP 요청을 받아들여 목적지의 IP 주소와 포트 번호로 커넥션을 맺고
    • 이후부터 암호화된 SSL 트래픽을 HTTP 채널을 통해 목적지 서버로 전송한다
    • 즉, 여기서 터널은 단순히 커넥션을 연결해주고, 데이터를 전송하는 통로의 역할만 해주는 것

에이전트

자동화된 HTTP 요청을 만드는 클라이언트

  • 사용자를 위해 HTTP 요청을 만들어주는 클라이언트 프로그램
  • 우리가 쓰는 웹 브라우저가 에이전트다
  • 이 외에 HTTP 트랜잭션을 일으키는 웹봇이 에이전트라고 할 수 있겠지?

출처 : HTTP 완벽 가이드

 Date: April 15, 2022
 Tags:  NETWORK

Previous:
⏪ [NODE] 노드의 내부를 파헤쳐보자 (4)

Next:
Binary Search ⏩