Young

HTTP 란? 본문

Web

HTTP 란?

yyjjang9 2020. 10. 4. 18:20
728x90
반응형

1. HTTP (Hyper Text Transfer Protocol) 정의

 

HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜.

HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초이며, 클라이언트-서버 프로토콜이기도 함.

 

여기에서 클라이언트는 보통 웹 브라우저(firefox, chrome, internet explorer ... ) 를 말함.

클라이언트와 서버는 메시지를 통해서 통신하는데,

클라이언트가 보내는 메시지를 request (요청), 서버가 보내는 메시지는 response (응답) 이라고 함.

 

 

여기에서 Hyper Text 란?

웹 페이지는 하이퍼텍스트 문서로, 표시된 텍스트의 일부는 사용자가 웹을 돌아다닐 수 있도록 새로운 웹 페이지를 가져오기 위해 실행(보통 마우스 클릭에 의해)될 수 있는 링크를 뜻함.

 

 

 

 

3. HTTP 특징

(1) 간단함

HTTP 메시지들은 사람이 읽고 이해할 수 있어, 테스트하기 쉬움.

 

(2) 확장 가능

HTTP 헤더는 HTTP를 확장하고 실험하기 쉽게 만들어주었음.

클라이언트와 서버가 새로운 헤더의 시맨틱에 대해 간단한 합의만 한다면, 언제든지 새로운 기능을 추가할 수 있음.

 

(3) Stateless

HTTP는 상태를 저장하지 않음(Stateless). 

동일한 연결 상에서 연속하여 전달된 두 개의 요청 사이에는 연결고리가 없음.

이는 e-커머스 쇼핑 바구니처럼, 일관된 방식으로 사용자가 페이지와 상호작용하길 원할 때 문제됨.

하지만, HTTP의 핵심은 상태가 없는 것이지만, HTTP 쿠키는 상태가 있는 세션을 만들도록 해줌.
헤더 확장성을 사용하여, 동일한 컨텍스트 또는 동일한 상태를 공유하기 위해 각각의 요청들에 HTTP 쿠키가 추가됨.

 

(4) Connectionless

클라이언트와 서버가 한 번 연결을 맺은 후, 클라이언트 요청에 대해 서버가 응답을 마치면 맺었던 연결을 끊어 버리는 성질.

 

연결은 transport layer 에서 제어되므로 근본적으로 HTTP 영역 밖임.

HTTP는 연결될 수 있도록 하는 근본적인 전송 프로토콜을 요구하지 않음.

그저 신뢰할 수 있거나 메시지 손실이 없는(최소한의 오류는 표시) 연결을 요구할 뿐임.

가장 일반적인 두 개의 전송 프로토콜 중에서 TCP는 신뢰할 수 있으며, UDP는 그렇지 않음.

그러므로 HTTP는 연결이 필수는 아니지만, 연결 기반인 TCP 표준에 의존함.

 

클라이언트와 서버가 HTTP를 요청/응답으로 교환하기 전에 여러 왕복이 필요한 프로세스인 TCP 연결을 설정해야 함.

HTTP/1.0의 기본 동작은 각 요청/응답에 대해 별도의 TCP 연결을 여는 것임.

 

HTTP/1.1은 (구현하기 어렵다고 입증된) 파이프라이닝 개념과 지속적인 연결(Keep-Alive) 의 개념을 도입.

HTTP/2는 연결을 좀 더 지속되고 효율적으로 유지하는데 도움이 되도록,

단일 연결 상에서 메시지를 다중 전송(multiplex)하여 한 걸음 더 나아갔음.

HTTP에 더 알맞은 좀 더 나은 전송 프로토콜을 설계하는 실험이 진행 중임.

예를 들어, 구글은 좀 더 신뢰성있고 효율적인 전송 프로토콜을 제공하기 위해 UDP기반의 QUIC를 실험 중 임.

 

 

 

 

4. HTTP 흐름

클라이언트가 서버와 통신할 때, 다음 과정을 수행함.

 

1. TCP 연결을 연다. TCP 연결은 요청을 보내거나 응답을 받는데 사용됨.

클라이언트는 새 연결을 열거나, 기존 연결을 재사용.

 

2. HTTP 메시지를 전송.

HTTP 메시지(HTTP/2 이전의)는 인간이 읽을 수 있음. HTTP/2에서는 직접 읽는게 불가능.

GET / HTTP/1.1
Host: developer.mozilla.org
Accept-Language: fr

3. 서버에 의해 전송된 응답을 읽어들임.

HTTP/1.1 200 OK
Date: Sat, 09 Oct 2010 14:28:02 GMT
Server: Apache
Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT
ETag: "51142bc1-7449-479b075b2891b"
Accept-Ranges: bytes
Content-Length: 29769
Content-Type: text/html

<!DOCTYPE html... (here comes the 29769 bytes of the requested web page)

4. 연결을 닫거나, 다른 요청들을 위해 재사용.

※ HTTP/1.x의 커넥션 관리 간단한 설명 (자세한 설명 링크)

HTTP 파이프라이닝이 활성화되면, 첫번째 응답을 완전히 수신할 때까지 기다리지 않고 여러 요청을 보낼 수 있음.

하지만, HTTP 파이프라이닝은 오래된 소프트웨어와 최신 버전이 공존하고 있는, 기존의 네트워크 상에서 구현하기 어렵다는게 입증되었으며, 프레임안에서 다중 요청을 보내는 HTTP/2로 교체되고 있음.

 

 

 

 

 

5. HTTP 메시지

HTTP 메시지의 두 가지 타입인 요청(request)과 응답(response)은 각자의 특성있는 형식을 가지고 있음.

 

(1) 요청(request) 예시

요청은 다음의 요소들로 구성됨.

  • HTTP 메서드 : 클라이언트가 수행하고자 하는 동작을 정의.
  • 메서드 종류 : GET / POST / PUT / DELETE / HEAD / OPTION / TRACE
  • 가져오려는 resource path : 프로토콜 (http://), 도메인 (여기서는 developer.mozilla.org), TCP포트 (여기서는 80) 인 요소들을 제거한 리소스의 URL.
  • HTTP 프로토콜의 버전.
  • 서버에 추가 정보를 전달하는 선택적 헤더.
  • POST와 같은 몇 가지 메서드를 위한 본문 : 예를 들어, 게시판에 글 등록할 경우, POST 메서드와 함께 본문을 함께 보냄. 

 

 

(2) 응답(response) 예시

응답은 다음의 요소들로 구성됩니다:

  • HTTP 프로토콜의 버전.
  • 요청의 성공 여부와, 그 이유를 나타내는 상태 코드.
  • 아무런 영향력이 없는, 상태 코드의 짧은 설명을 나타내는 상태 메시지.
  • 요청 헤더와 비슷한, HTTP 헤더들.
  • 선택 사항으로, 가져온 리소스가 포함되는 본문.

 

 

 

 

 

728x90
반응형

'Web' 카테고리의 다른 글

HTTP/1.x의 커넥션 관리  (0) 2020.10.06
HTTP, TCP, IP 란?  (0) 2020.10.04
reactive  (0) 2020.10.01
gRPC  (0) 2020.10.01
RPC (Remote Procedure Call)  (0) 2020.09.30