본문 바로가기
STUDY/CS

하이퍼 텍스트 전송 프로토콜 (HTTP, Hyper Text Transfer Protocol)

by bottlesun 2022. 12. 28.
728x90

하이퍼 텍스트 전송 프로토콜 (HTTP, Hyper Text Transfer Protocol) 이란?

웹 브라우저와 서버 사이에 HTML 문서와 같은 리소스 들을 주고 받을 수 있도록 해주는 통신 프로토콜 이다.

모든 데이터 교환의 기초이며, 클라이언트 - 서버 프로토콜이다.

HTTP에서는 클라이언트가 서버에 요청 메세지를 보내고 서버는 클라이언트의 요청에 대한 응답을 반환한다. 연결 상태를 유지하지 않는 비 연결성 프로토콜이며, 요청과 응답(request, response) 방식으로 동작한다.

연결 상태를 유지하지 않는다는 말은 서버는 응답 메시지를 반환한 후에 클라이언트의 상태를 저장하지 않는다는 것입니다. 때문에 HTTP 프로토콜은 상태가 없는 프로토콜, 무상태성(stateless)라고도 불립니다.

HTTP 기반 시스템의 구성요소

각 개별적인 요청들은 서버로 보내지며, 서버는 요청을 처리하고 response 라고 불리는 응답을 제공하며, 이 요청과 응답 사이에는 다양한 작업을 수행하는 게이트웨이 , 캐시역할을 하는 프록시 등이 존재한다.

출처 : [mdn] https://developer.mozilla.org/ko/docs/Web/HTTP/Overview

HTTP 의 기초적인 측면

간단한 사용

사람이 읽을 수 있으며 간단하게 고안이 되어있다. HTTP 메세지를 프레임별로 캡슐화 하여 간결함을 유지 하였다. (진입장벽을 낮춤)

확장성

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

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

상태가 없다(Stateless)

상태를 저장하지 않는 Stateless 형태로 동일한 연결 상에서 연속하여 전달 된 요청 사이에 연결고리가 없다.

이 방식은 사용자가 페이지와 상호작용 하길 원할 경우에는 세션을 사용해 해결 한다.

HTTP 연결

연결은 전송 계층에서 제어되므로 HTTP 영역 밖이다. 인터넷 상의 가장 일반적인 두 개의 전송 프로토콜 중에서 TCP는 신뢰할 수 있으며 UDP는 그렇지 않는다. 그러므로 HTTP는 연결이 필수는 아니지만 연결 기반인 TCP 표준에 의존한다.

HTTP로 제어 할 수 있는 것

캐시

HTTP 로 문서가 캐시 되는 방식을 제어 할 수 있다. 서버는 캐시 대상과 기간을 프록시와 클라이언트에 지시 할 수 있다.

인증

어떤 페이지들은 보호되어 오로지 특정 사용자만이 그것에 접근 할 수 있도록 할 수 있다. 기본 인증은 HHTP 를 통해 유사 헤더를 사용해 제공 되거나,

HTTP 쿠키를 사용해 특정 세션을 설정하여 이루어 질 수 있다.

프록시와 터널링

서버 혹은 클라이언트 ,

세션

HTTP 쿠키는 상태가 있는 세션을 만들도록 해주고 헤더 확장성을 사용하여, 동일한 컨텍스트 또는 동일한 상태를 공유하기 위해 각각의 요청들에 세션을 만들도록 HTTP 쿠키를 사용 할 수 있다.

요청과 응답 (Request, Response)

클라이언트란 요청을 보내는 쪽을 의미하며, 일반적으로 웹 관점에서는 브라우저를 의미합니다. 서버란 요청을 받는 쪽을 의미하며 일반적으로 데이터를 보내주는 원격지의 컴퓨터를 의미합니다.

요청 (Request)

GET / HTTP/ 1.1
Host: www.naver.com:443 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
sec-ch-ua: "Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92"
sec-ch-ua-mobile: ?0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36

Request Line

request가 시작되는 줄 (request line)에는 다음과 같은 정보를 담습니다.

\

  1. HTTP 메서드 (GET, POST 등)를 사용해 서버가 수행해야 할 동작을 나타냅니다.
  2. 요청 타겟 (URL, 또는 포르토콜, 포트, 도메인)을 나타내며, 이들은 요청 컨텍스트에 의해 특정 지어집니다.
  3. HTTP 버전이 들어갑니다. 응답 메시지에 사용할 HTTP 버전을 알려주는 역할을 합니다.

Header

  • 요청에 들어가는 HTTP 헤더는 HTTP 헤더 기본 구조를 따릅니다.
  • 대소문자 구분 없는 문자열 다음 콜론 (' : ')이 붙으며, 그 뒤에 오는 값은 헤더에 따라 달라집니다.
  • 헤더를 세분화하면 General Header, Request Header, Entity Header으로 나눌 수 있습니다.(해당 부분은 아래에서 다시 설명하겠습니다.)

Body

  • request의 마지막 부분에 들어갑니다. 모든 요청에 들어가지는 않고 Get, HEAD, DELETE, OPTIONS처럼 리소스를 가지고 오는 요청은 대부분 본문을 필요로 하지 않습니다.
  • 바디는 단일-리소스 본문(single-resource bodies), 다중-리소스 본문(multiple-resource bodies)으로 나눠집니다.

응답 (Response)

HTTP/1.1 200
cache-control: no-cache, no-store, must-revalidate
content-encoding: gzip
content-type: text/html; charset=UTF-8
date: Wed, 25 Aug 2021 02:42:02 GMT
p3p: CP="CAO DSP CURa ADMa TAIa PSAa OUR LAW STP PHY ONL UNI PUR FIN COM NAV INT DEM STA PRE"
pragma: no-cache
referrer-policy: unsafe-url
server: NWS
strict-transport-security: max-age=63072000; includeSubdomains
x-frame-options: DENY
x-xss-protection: 1; mode=block

Status Line

response가 시작되는 줄 (status line)은 다음과 같은 정보를 가지고 있습니다.

\

  1. 프로토콜 버전, 보통 HTTP/1.1 입니다.
  2. 상태 코드, 요청의 성공 여부를 나타냅니다. (200, 404, 302 등의 코드)
  3. 상태 텍스트, 짧고 간결하게 상태 코드에 대한 설명을 글로 나타냅니다. (Not Found)

Header

  • 응답에 들어가는 HTTP 헤더는 요청과 마찬가지로 HTTP 헤더의 기본 구조를 따릅니다.
  • 대소문자 구분 없는 문자열 다음 콜론 (' : ')이 붙으며, 그 뒤에 오는 값은 헤더에 따라 달라집니다.
  • 헤더를 세분화하면 General Header, Request Header, Entity Header으로 나눌 수 있습니다.

Body

  • response의 마지막 부분에 들어갑니다. 모든 응답에 들어가지는 않고 201, 204 같은 상태 코드를 가진 응답에는 보통 본문이 없습니다.
  • response body는 이미 길이가 알려진 단일 파일로 구성된 헤더 두 개(Content-Type, Content-Length)를 가진 단일-리소스 본문, 길이를 모르는 단일 파일로 구성된 단일-리소스 본문, 서로 다른 정보를 담고 있는 멀티파트로 이루어진 다중-리소스 본문 이렇게 크게 3가지로 나눌 수 있습니다.

헤더 (Header)

- General Header

요청과 응답에 모두 적용되지만, 데이터와는 관련이 없는 헤더

: Date, Connection (클라이언트와 서버 간의 연결에 대한 옵션) 등

Request Header

요청하는 클라이언트에 대한 자세한 정보를 포함하는 헤더

: Host, User-Agent, Cookie 등

Response header

서버 자체에 대한 정보, 응답에 대한 부가적인 정보를 포함하는 헤더

: Server, Allow, ETag, Access-Control-Allow-Origin 등

Entity Header

콘텐츠의 길이나 MIME 타입과 같이 Entity Body에 대한 자세한 정보를 포함하는 헤더

: Content-Type, Content-Length 등

메서드 (Method)

  • GET : 존재하는 자원에 대한 요청
  • POST : 새로운 자원을 생성
  • PUT : 존재하는 자원에 대한 변경 (자원 전체를 갱신)
  • PATCH : 존재하는 자원에 대한 변경 (자원 일부를 교체)
  • DELETE : 존재하는 자원에 대한 삭제
  • OPTIONS : 웹 서버에 지원되는 메서드의 종류를 확인할 경우 사용

상태 코드 (Status Code)

  • 1xx : Informational - 요청 정보를 처리 중
  • 2xx : Success - 요청을 정상적으로 처리함
  • 3xx : Redirection - 요청을 완료하기 위해 추가 동작이 필요함
  • 4xx : Client Error - 클라이언트의 요청 오류
  • 5xx : Server Error - 서버 측 오류
728x90

댓글