인코딩 (Encoding)
컴퓨터의 모든 데이터는 0과 1로 구성되어 있다.
0과 1로 문자를 표현하기 위해 사용하는 약속들을 인코딩(Encoding) 표준이라 한다.
대표적으로 아스키(Ascii)와 유니코드(Unicode)가 있다.
아스키(Ascii)는 7비트 데이터에 대한 인코딩 표준으로, 알파벳과 특수 문자 등을 표현할 수 있다. ex) 1000001 → 'A'
초기에는 각 문자권마다 고유의 인코딩 표준을 사용해 호환성 문제가 발생하였다.
이러한 문제를 해결하고자 유니코드라는 새로운 표준이 만들어졌다.
유니코드(Unicode)는 한 문자를 최대 32개의 비트로 표현한다.
32비트로는 대략 42억 개의 문자를 표현할 수 있어, 유니코드로 모든 언어의 문자를 표현할 수 있다.
인코딩을 통해 컴퓨터에 문자를 저장하고 표현할 수 있다.
이렇게 인코딩된 데이터가 웹 서버를 통해 우리에게 전달되고 있다.
HTTP (Hyper Text Transfer Protocol)
HTTP는 서버와 클라이언트의 데이터 교환을 요청(Request)과 응답(Response) 형식으로 정의한 프로토콜이다.
클라이언트가 서버에 특정 리소스 제공을 요청하면, 서버가 해당 리소스를 반환한다.
이때 클라이언트의 행위를 요청 (Request), 서버의 행위를 응답 (Response)라고 한다.
💡 프로토콜 (Protocol)
프로토콜은 규격화된 상호작용에 적용되는 약속이다.
표준 통신 프로토콜에는 TCP/IP, HTTP, FTP 등이 있다.
HTTP 메시지 구성
HTTP 메시지는 HTTP 헤더와 바디로 구성된다.

1. HTTP 헤더 (Headers)
- 첫 줄은 시작 줄(Start line), 나머지 줄은 헤더(Header)
- 각 줄은 CRLF로 구분
- 헤더(Header)
- 헤더의 끝은 빈 줄
- 필드와 값으로 구성, HTTP 메시지 또는 바디의 속성을 나타낸다.
- 하나의 HTTP 메시지에는 0개 이상의 헤더가 있을 수 있다.
2. HTTP 바디 (Body)
- 헤드의 끝을 나타내는 CRLF 뒤 모든 줄
- 클라이언트나 서버에게 전송하려는 데이터가 바디에 담긴다.
💡CRLF (Carriage Return + Line Feed)
Carriage Return : 커서를 현재 줄의 맨 앞으로 이동시키는 문자
Line Feed : 커서를 다음 줄로 이동시키는 문자
주로 텍스트 파일에서 줄 바꿈을 나타내는 데 사용되는 제어 문자열
윈도우 - CRLF, 리눅스/유닉스 - LF만 사용
HTTP 메시지 종류
HTTP 메시지에는 클라이언트가 전송하는 HTTP 요청, 서버가 반환하는 HTTP 응답이 있다.
1. HTTP 요청
- 서버에게 특정 동작을 요구하는 메시지
- 시작 줄 - 각각은 띄어쓰기로 구분
- 메소드 (Method)
요청 대상에 대해 서버가 수행하길 바라는 동작
HTTP 표준에 정의된 메소드는 8개 ex) GET, POST - 요청 대상 (Request target)
메소드의 대상 - HTTP 버전
클라이언트가 사용하는 HTTP 프로토콜
- 메소드 (Method)
2. HTTP 응답
- 요청에 대한 결과를 반환하는 메시지
- 시작 줄 - 각각은 띄어쓰기로 구분
- HTTP 버전
서버에서 사용하는 HTTP 프로토콜의 버전 - 상태 코드 (Status Code)
요청에 대한 처리 결과, 세 자릿수로 나타낸다.
상태 코드 설명 대표 예시 1xx 요청을 제대로 받았고, 처리가 진행 중임 2xx 요청이 제대로 처리됨 • 200(OK): 성공 3xx 요청을 처리하려면, 클라이언트가 추가 동작 을 취해야 함. • 302(Found): 다른 URL로 갈 것 4xx 클라이언트가 잘못된 요청을 보내어 처리에 실패했습니다. • 400(Bad Request): 요청이 문법에 맞지 않음 •
401(Unauthorized): 클라이언트가 요청한 리소스에 대한 인증이 실패함 •
403(Forbidden): 클라이언트가 리소스에 요청할 권한이 없음 •
404(Not Found): 리소스가 없음5xx 클라이언트의 요청은 유효하지만, 서버에 에러가 발생하여 처리에 실패했습니다. • 500(Internal Server Error): 서버가 요청을 처리하다가 에러가 발생함 •
503(Service Unavailable): 서버가 과부하로 인해 요청을 처리할 수 없음 - 처리 사유 (Reason Phrase)
상태 코드가 발생한 이유 짧게 기술
- HTTP 버전
HTTPS (HTTP over Secure socket layer)
HTTP는 다음과 같이 응답과 요청을 평문으로 전달한다.
따라서, ID와 비밀 번호 같은 중요한 정보가 유출될 수 있다.
이러한 문제점을 보완하기 위해 HTTPS는 TLS(Transport Layer Security) 프로토콜을 도입한다.
TLS는 모든 HTTP 메시지를 암호화해 공격자가 메시지를 탈취하더라도 이를 해석할 수 없게 한다.
현재 개발되는 많은 서비스가 HTTPS를 사용하고 있다.
URL이 http://로 시작된다면 HTTP, https://로 시작된다면 HTTPS 프로토콜을 사용하는 것이다.
'Security > Web Hacking' 카테고리의 다른 글
| [Web Hacking] Dreamhack - xss (2) (0) | 2025.08.17 |
|---|---|
| [Web Hacking] Dreamhack - xss (1) (0) | 2025.08.16 |
| [Web Hacking] Dreamhack - Background : Web (2) | 2024.09.02 |
| [Web Hacking] 파라미터 변조 취약점 (Parameter Tampering Vulnerability) (0) | 2024.08.20 |
| [Web Hacking] OS Command Injection (0) | 2024.08.19 |