HTTP 프로토콜 기본 이해

두부4등분·2025년 5월 6일

웹 해킹 스터디 - 1

목록 보기
2/3
post-thumbnail

http 요청/응답 구조

http란?

  • HTML 문서를 교환하기 위해 만들어진 프로토콜이다.
  • http는 기본적으로 요청/응답 구조로 되어있다.
    -> 클라이언트가 http request를 서버에 보내면 서버는 http response를 보내는 구조

HTTP request 구조

http request 구조는 공백을 제외하고 3가지 부분으로 나뉜다.

  • start line
  • headers
  • body

start line

  • http method
    - 요청의 의도를 담고 있는 GET, POST, PUT, DELETE등이 있다.
  • request target
    - http request가 전송되는 목표 주소
  • http version
    - version에 따라 request 메세지 구조나 데이터가 다를 수 있어

headers

해당 request에 대한 추가 정보를 담고 있는 부분
헤더도 크게 3가지 부분으로 나뉜다. (general, request, entity)
Key : Value 형태로 구성

  • Host 요청하려는 서버 호스트 이름과 포트번호
  • User-agent 클라이언트 프로그램 정보. 이 정보를 통해 서버는 클라이언트 프로그램(브라우저)에 맞는 최적의 데이터를 보내줄 수 있다.
  • Referer 바로 직전에 머물렀던 웹 링크 주소 
  • Accept 클라이언트가 처리 가능한 미디어 타입 종류 나열
  • If-Modified-SinceIf-Modified-Since 여기에 쓰여진 시간 이후로 변경된 리소스 취득. 페이지가 수정되었으면 최신 페이지로 교체한다.
  • Authorization 인증 토큰을 서버로 보낼 때 쓰이는 Header
  • Origin 서버로 Post 요청을 보낼 때 요청이 어느 주소에 시작되었는지 나타내는 값. 이 값으로 요청을 보낸 주소와 받는 주소가 다르면 CORS(Cross-Origin Resource Sharing) 에러가 발생한다.
  • Cookie 쿠키 값이 key-value로 표현된다.

body

http request가 전송하는 데이터를 담고 있는 부분
전송하는 데이터가 없다면 body 부분은 비어있다.

HTTP response 구조

http response 구조도 공백 제외하고 3가지 부분으로 나뉜다.

  • status line
  • headers
  • body

status line

http response의 상태를 간략하게 나타내주는 부분

  • http version
  • status code: 응답 상태를 나타내는 코드
  • status text: 응답 상태를 간결하게 설명해주는 부분
HTTP/1.1 200 OK
[HTTP version] [Status Code] [Status Text]

headers - request의 headers와 동일

body - request의 body와 일반적으로 동일

주요 메서드 특징 정리

GET 메서드

GET 메서드는 서버에서 특정 데이터를 가져와 클라이언트가 조회할 수 있도록 보여주는 용도의 메소드이다.

GET 메서드 사용방법

URL의 끝에 ?를 붙이고, 요청정보가(Key=value)의 해시맵 형태의 쌍을 ?뒤에 붙여서 서버로 전송한다. 요청정보가 여러개일 경우 '&'로 구분한다.
ex)www.url.com?name1=value1&name2=value2

GET 메서드 특징

  • URL에 요청 정보를 붙여서 전송하며, 요청 정보가 이어붙기 때문에 길이 제한이 있어 대용량의 데이터를 전송하기 어렵다.
    - 한번 요청시 전송 데이터의 양(url+파라미터)은 255자로 제한된다.
  • URL에 정보들이 그대로 노출되기 때문에 POST 방식에 비해 보안에 취약하다.
  • http 패킷의 body는 비어있는 상태로 전송
    - body의 데이터 타입을 표현하는 'Content-Type'필드도 http request headers에 들어가지 않음
  • GET 메서드는 캐싱을 사용할 수 있어 POST방식보다 빠르다

POST 메서드

POST 메서드는 클라이언트가 서버의 값이나 상태를 바꾸기 위한 용도의 메소드이다.

POST 메서드 사용 방법

요청 정보를 http 패킷의 body안에 숨겨 서버로 전송한다. request header의 Content-Type에 해당 데이터 타입이 표현되며, 전송하고자하는 데이터 타입을 적어주어야 한다.
ex)

POST /members HTTP/1.1 
Content-Type: application/json
{
    "username": "hello",
    "age": 20 
}

POST 메서드 특징

  • body 안에 요청정보를 숨겨 서버에 전송하기 때문에 GET 방식보다 보안상 안전하다.
  • body 안에 요청정보를 숨겨 서버에 전송하기 때문에 대용량의 데이터를 전송하기에 적합하다.
  • POST 요청은 GET 방식과는 다르게 캐시되지 않으며 브라우저 히스토리에 남지 않는다.
  • 클라이언트에서 데이터를 인코딩하여 서버로 전송하고, 이를 받은 서버에서 해당 데이터를 디코딩한다.

http 상태코드

위에서 http response 구조에서 status line에 status code가 http의 상태 코드이다.

http 상태코드는 왜 필요한가?

클라이언트가 보낸 요청을 서버가 어떻게 처리했는지 한번에 알려주는 3자리 숫자이다. status line에 들어가며, 5개 범주로 나뉜다.

  • 1XX: Informational(정보 제공)
    -임시 응답으로 현재 클라이언트의 요청까지는 처리되었으니 계속 진행하라는 의미
  • 2XX: Success
    - 클라이언트의 요청이 서버에서 성공적으로 처리되었다는 의미
  • 3XX: Redirection
    - 완전히 처리를 위해서 추가 동작이 필요한 경우이다. 주로 서버의 주소 또는 요청한 URL이 웹 문서가 이동되었으니 그 주소로 다시 시도하라는 의미이다.
  • 4XX: Client Error
    - 없는 페이지를 요청하는 등 클라이언트의 요청 메시지 내용이 잘못된 경우를 의미
  • 5XX: Server Error
    - 서버 사정으로 메세지 처리에 문제가 발생한 경우

HTTP의 stateless 보완 방법

stateless란?

http의 비연결성 특징으로 인해 서버는 클라이언트를 식별할 수 없는데, 이를 stateless라 한다.
--> 매번 새로운 인증을 해야하는 번거로움이 발생

상태를 기억하는 방법

  1. 쿠키
    쿠키는 웹 브라우저가 보관하는 데이터이다.
    웹 서버는 쿠키를 생성하여 웹 브라우저에 정보를 전송 할 수 있다.
    쿠키는 key-value 형태로 웹 브라우저의 쿠키 저장소에 저장된다.
    서버로부터 쿠키를 전달 받은 웹 브라우저는 이후 웹 서버에 요청을 보낼 때 쿠키를 헤더에 실어서 함께 전송한다.
    이를 이용하여 웹 서버와 클라이언트는 필요한 값을 공유하고 상태를 유지할 수 있다.

    클라이언트에 보관된 쿠키는 유효기간 설정이 가능하다. 유효기간을 설정하지 않을 시에는 브라우저 종료와 함께 종료된다.
    하지만 쿠키만으로 로그인을 구현하는 것에 한계가 존재한다. 쿠키는 네트워크를 통해 전달되기 대문에 중간에 쿠키를 탈취할 수 있다는 취약점이 있다. 이를 보완하고자 세션을 사용한다.

  2. 세션
    세션도 마찬가지로 클라이언트의 상태를 저장할 수 있다. 쿠키와 다른 점은 쿠키는 각 브라우저의 별도 쿠키 저장소에 저장되는 반면에 세션은 서버에 저장된다.

    웹 브라우저는 각각 별도의 세션을 갖는다. 각 세션을 구분하기 위해 고유 ID를 할당하고, 웹 서버는 각 브라우저에 세션 ID를 전송한다. 우베 브라우저는 웹 서버에 연결 시 매번 세션 ID를 보내서 웹 서버가 어떤 세션을 사용할지 알 수 있도록 한다. 이때, 웹 서버와 웹 브라우저가 세션 ID를 주고받기 위해서 사용하는 것이 쿠키이다.
    세션은 브라우저가 아닌 서버에서 사용자 정보를 저장하는 구조이기에 쿠키보다는 안전하다.
    하지만 세션 정보도 중간에 탈취 당할 수 있기에 보안에 완벽하다고 할 수 없다. 또한 세션을 사용하면 서버의 메모리를 차지하게 되고 동시 접속자가 많은 서비스일 경우 서버 과부화의 원인이 된다.

0개의 댓글