업데이트:

카테고리:

/

태그: ,

HTTP(HyperText Transfer Protocol)

HTML 문서와 같은 리소스를 가져올 수 있도록 해주는 프로토콜이다.
웹에서 이루어지는 모든 데이터 교환에 기초이며, 클라이언트-서버 프로토콜이다.
클라이언트-서버 프로토콜은 수신자 측에 의해 요청이 초기화되는 프로토콜이다.

클라이언트와 서버들은 개별적인 메세지 교환에 의해 통신하는데 브라우저(클라이언트)가 전송하는 메세지를 요청(requests)라고 부르고, 그에 대해 서버에서 응답으로 전송되는 메세지를 응답(responses)이라고 한다.

클라이언트(사용자 에이전트)

클라이언트는 사용자를 대신하여 동작하는 모든 도구, 주로 브라우저에 의해 수행된다.
브라우저는 항상 요청을 보내는 개체이며 결코 서버가 될 수 없다.

Untitled (8) 웹 페이지를 표시하기 위해, 브라우저는 페이지의 HTML 문서를 가져오기 위한 요청을 전송을 전송한 뒤, 파일을 구문 분석하여 실행해야 할 스크립트 그리고 페이지 내 포함된 하위 리소스(이미지와 비디오)들을 잘 표시하기 위한 레이아웃 정보(CSS)에 대응하는 추가적인 요청을 가져온다. 그런 뒤에 브라우저는 완전한 문서인 웹페이지를 표시하기 위해 그런 리소스들을 혼합한다. 브라우저에 의해 실행된 스크립트는 이후 단계에서 좀 더 많은 리소스를 가져올 수 있으며 브라우저는 그에 따라 웹페이지를 갱신하게 된다.

웹 페이지는 하이퍼텍스트 문서로, 클라이언트를 제어하고 새로운 웹 페이지를 가져오기 위해 실행될 수 있는 링크를 뜻한다.

웹 서버

클라이언트에 의한 요청에 대한 문서를 제공하는 서버이다.
여러 개의 서버를 동일한 머신 위에서 호스팅하는 경우 HTTP/1.1과 Host 헤더를 이용하여 동일한 IP주소를 공유할 수 있다.

프록시

브라우저와 서버 사이에는 수많은 컴퓨터가 HTTP 메세지를 이어 받고 전달한다.
여러 계층으로 이루어진 웹 스택 구조에서 컴퓨터들은 전송, 네트워크, 물리 계층에서 동작하나 HTTP 계층에서는 어떻게 동작하는지 보이지 않는다. 이러한 컴퓨터 중에 어플리케이션 계층에서 동작하는 것프록시라 부른다.

  • 캐싱: 캐시는 공개 또는 비공개가 될 수 있음
  • 필터링: 바이러스 백신 스캔, 유해 컨텐츠 차단(자녀 보호) 기능
  • 로드 밸런싱: 여러 서버들이 서로 다른 요청을 처리하도록 허용
  • 인증: 다양한 리소스에 대한 접근 제어
  • 로깅: 이력 정보를 저장

HTTP 흐름

클라이언트와 서버와 통신하고자 할 때, 다음 단계의 과정을 수행한다.

  1. TCP 연결을 연다. TCP 연결은 요청을 보내거나 응답을 받는데 사용한다. 클라이언트는 새 연결을 열거나, 기존 연결을 재사용하거나, 서버에 대한 여러 TCP 연결을 열 수 있다.
  2. HTTP 메세지를 전송한다. HTTP/2 이전의 메세지는 인간이 읽을 수 있으나, HTTP/2에서는 프레임 속으로 캡슐화되어 직접 읽는게 불가능하지만 원칙은 동일하다.
  3. 서버에 의해 전송된 응답을 읽어들입니다.
  4. 연결을 닫거나 다른 요청을 위해 재사용한다.

요청

image

  • Method: 클라이언트가 수행하고자 하는 동작을 정의한 것으로 GET, POST, DELETE, PUT, OPTIONS, HEAD등이 있음
  • Path: 가져오르는 리소스의 경로
  • Version of the protocol: 프로토콜 버전
  • Headers: 서버에 대한 추가적인 정보

응답

image

  • Version of the protocol: 프로토콜 버전
  • Status code: 요청의 성공 여부와 그 이유를 나타내는 상태코드
  • Status message: 상태 코드의 짧은 설명을 나타내는 상태 메세지
  • Headers: 요청 헤더와 비슷한 HTTP 헤더

HTTPS(HyperText Transfer Protocol over Secure Socket Layer)

HTTP에서 보안이 강화된 버전으로 추가 암호화, 인증이 추가되었다.

암호화: HTTP는 원래 일반 텍스트 프로토콜로 이루어져있기 때문에 도청 및 중간 공격에 취약합니다. 공개 키 암호화SSL을 통해 비밀 키를 생성하여 직접 만나지 않은 두 당사자간에 암호화 된 통신 세션을 안전하게 설정할 수 있다.

입증: 웹 사이트의 SSL을 포함하는 사람만이 디지털 서명을 했다는 것을 웹 브라우저를 사용할 수 있다. 사용자가 서버의 인증서에 서명을 한 경우 신뢰할 수 있는 유저로 확인되어 요청을 수락한다.