이것이 점프 투 공작소

HTTP 프로토콜의 구조 본문

해킹,보안

HTTP 프로토콜의 구조

겅겅겅 2023. 8. 12. 13:24

프로토콜이란?

네트워크에서 데이터를 교환하기 위해 사용되는 통신 규약입니다.

크게 인터넷 프로토콜 (IP, TCP, UDP 등), 어플리케이션 프로토콜(FTP, SMTP, HTTP 등)로 구분됩니다.

HTTP 프로토콜이란?

HyperText (HTML)을 교환하기 위해 만들어진 TCP 기반의 프로토콜입니다.

하지만 HTML 뿐만 아니라 텍스트, JSON, 이미지, 영상 등의 데이터 또한 교환이 가능합니다.

HTTP 프로토콜의 특징

1. Server-Client 구조

요청을 받는 Server와 요청을 보내는 Client로 분리되어있습니다.

Clinet는 Server에세 HTTP Request요청을 보내고, 요청을 받은 Server는 HTTP Response요청을 Client에게 전달합니다.

2. Stateless 

HTTP요청은 TCP 연결 이후 진행되는 과정이기에 연결에 따른 상태 정보가 존재하지 않습니다.

서버/클라이언트간 요청에서 서버는 클라이언트의 요청에 대한 데이터를 저장하지 않기에 매번 독립적인 요청으로서 취급합니다.

3. Connectionless (비연결성) -> Persistent Connections (지속적 연결)

Connectionless (비연결성)

HTTP 요청은 TCP 연결 수립 이후 이루어 지기에 기본적으로 Connectionless의 성질을 가집니다.

서버 자원을 효율적으로 사용 할 수 있지만 브라우저는 HTML, JS, CSS, 이미지 파일등 많은 자원들이 필요하기에 매 연결마다 3way handshake를 실행하여야 하는 단점이 있습니다.

HTTP 1.1+ 버전 이후 서버의 응답 헤더에 Connection : keep-alive 헤더를 사용하게되면 Persistent Connection(지속적 연결)을 하게됩니다.

출처 : 김영한님 HTTP 강의

 

Persistent Connections (지속적 연결방법)

HTTP/2 버전 이후부터는 Multiple Connections을 이용한 Persistent Connection이 기본적으로 활성화 되어있습니다.

기존 1버전에서는 js. css 파일들을 가져오기위해 각각 HTTP요청을 통해 받아와야했지만 

HTTP/2 버전에서는 스트림을 생성하여 단일 TCP연결로 동시의 여러 리소스를 받아 올 수 있습니다. 

이를 Multiple Connections 이라고 합니다.

출처 : wiki

HTTP의 구조

Request 요청과 Resonponse 응답이 존재하며 각 요청은 크게 아래 4가지 항목을 가지며

실제 데이터를 담고있는건 Empty Line을 제외한 Start Line, Headers, Body 3가지입니다.

 

  • Start Line : HTTP 메소드와 URL
  • Headers : 헤더 정보
  • Empty Line : 본문(Body) 시작 전 공백
  • Body : HTTP의 메세지 내용

Start Line

HTTP 메소드(GET, POST 등)와 요청 URL, HTTP Version 3가지 요소를 가집니다.

Headers

요청에 대한 추가 정보가 담겨있는 영역입니다.

  • HOST : 요청하는 HOST의 IP 및 포트
  • User-Agent : HTTP요청을 발생시킨 클라이언트 프로그램 정보
  • Accept : 클라이언트가 원하는 응답 컨텐츠 형식 (application/json 등)
  • Connection : 해당 요청이 끝난 후에 서버가 네트워크 커넥션을 유지할지 여부 (keep-alive 면 지속연결)
  • Content-Type : 요청 본문(Body)에 담긴 요청 형식
  • Content-Length : 요청 본문의 담긴 데이터의 크기
  • Authorization : 클라이언트가 서버에 보내는 인증정보값 (JWT 토큰 등)
  • If-Modified-Since : 클라이언트가 서버에게 특정한 일자 이후 수정된 리소스만들 전달해달라고 요청시 사용하는 헤더 리소스가 변경되지 않았으면 304 Not Modified 응답
  • Origin : 클라이언트에서 요청 시 요청이 어느 주소에서 시작되었는지 알려주는 헤더, 요청을 보낸 origin값과 응답을 받는 origin값이 다르면 cors에러가 발생합니다.
  • Referer : 요청을 보내기 전 이전 페이지의 URL
  • Cookie : key-value로 지정된 쿠키값
  • Cache-Control : 클라이언트가 사용할 캐싱 동작을 지정하는 헤더 

Body

HTTP요청의 본문이 담기는 영역입니다.

EX) Request

EX) Response