HTTP(HyperText Transfer Protocol) 란?
- HTTP는 하이퍼텍스트(HTML 문서 등)를 웹 브라우저와 서버 간에 주고받기 위한 프로토콜입니다.
- HTTP는 웹 처리 전반에 걸친 토대가 되기 때문에 웹 서버를 HTTP 서버라고 부르기도 합니다.
- HTTP의 동작 방식
1. 클라이언트(브라우저)가 요청(Request)
- URL 입력 → HTTP 요청 전송 (예: GET /index.html HTTP/1.1)
2. 서버가 응답(Response)
- 요청받은 웹 페이지나 파일을 HTTP 응답으로 반환 - HTTP의 특징
1. 텍스트 기반 : 사람이 읽을 수 있는 텍스트 형식
2. Stateless(무상태) : 요청과 응답이 독립적
3. 확장성 : 다양한 데이터 형식 전송 가능 (HTML, 이미지, 동영상 등)
4. 포트 번호 : 기본 포트 80
HTTPS(HyperText Transfer Protocol Secure) 란?
- HTTPS는 웹에서 데이터를 안전하게 주고받기 위한 프로토콜 HTTP에 SSL/TLS 암호화가 추가된 형태입니다.
보안성, 신뢰성, 사용자 보호 강화를 위해 대부분의 웹사이트가 HTTPS 사용 중입니다. - HTTPS의 동작 방식
1. 브라우저에서 HTTPS 주소 입력 (예: https://example.com)
2. 서버가 인증서(SSL/TLS)를 제공
3. 브라우저가 인증서 유효성 검증
4. 데이터 암호화 후 통신 시작 - HTTPS의 주요 특징
1. 암호화 (Encryption) : SSL/TLS 기술로 통신 데이터를 암호화해서 중간에 탈취되어도 내용을 알 수 없음
2. 인증 (Authentication) : 신뢰할 수 있는 기관(CA)으로부터 서버 인증서를 발급받아, 서버의 신원을 검증
3. 무결성 (Integrity) : 데이터가 전송 중 변조되지 않았음을 보장
4. 포트 번호 : 기본 포트 443
HTTP 와 HTTPS
구분 | HTTP | HTTPS |
전체 이름 | HyperText Transfer Protocol | HyperText Transfer Protocol Secure |
보안성 | 🔓 암호화 없음 | 🔒 SSL/TLS 암호화 적용 |
사용 포트 | 80 | 443 |
데이터 보호 | 전송 중 데이터 노출 가능 | 전송 중 데이터 암호화 |
신뢰성 | 상대적으로 낮음 | 인증서로 신원 검증 가능 |
사용 예 | 단순 정보 조회 | 로그인, 결제 등 민감한 데이터 처리 시 필수 |
HTTP 헤더, 바디의 구조
- HTTP 메시지는 요청(Request), 응답(Response) 및 헤더(Header) 와 바디(Body) 로 나눌 수 있습니다.
1. HTTP 요청(Request)
- 시작줄 (Start Line)
예 : GET /index.html HTTP/1.1
의미 : index.html 파일을 가져와주세요
- 헤더 (Headers)
추가적인 정보 전달 (key: value 형식)
예: Host: http://www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
- 바디 (Body)
선택 사항
데이터 전송 시 사용 (예: POST 요청에서 폼 데이터)
예: username=chatgpt&password=secure
2. HTTP 응답(Response)
- 상태줄 (Status Line)
예 : HTTP/1.1 200 OK
의미 : 요청 성공적으로 처리했어요
- 헤더 (Headers)
응답 정보 제공
예: Content-Type: text/html
Content-Length: 3057
- 바디 (Body)
실제 컨텐츠 (HTML, JSON 등)
예: <html>
<body>
<h1>Welcome!</h1>
</body>
</html>
HTTP Method
1. GET 방식
- 데이터가 주소 입력란에 표시되므로 최소한의 보안도 유지되지 않는 취약한 방식
- 가장 일반적인 HTTP Request 형태로, 요청 데이터의 인수를 웹 브라우저의 URL로 전송
- 예시 : 웹 페이지 보기, 이미지 로딩
2.POST 방식
- 인숫값을 URL로 전송하지 않으므로 다른 사용자가 링크로 해당 페이지를 볼 수 없음
- 게시판의 경우: 목록이나 글 보기 화면은 접근 자유도를 위해 GET 방식을 사용 게시글을 저장·수정·삭제하거나 대용량
데이터를 전송할 때는 POST 방식을 사용
- URL에 요청 데이터를 기록하지 않고 HTTP 헤더에 데이터를 전송
- 예시 : 회원가입, 로그인
3. 기타 방식
- OPTIONS 방식: 자원에 대한 요구/응답 관계와 관련된 선택 사항 정보를 요청할 때 사용
예시 : 서버 기능 점검
- DELETE 방식: URI에 지정된 자원을 서버에서 지울 수 있게 함
예시 : 게시글 삭제
- PUT 방식: 메시지에 포함된 데이터를 지정된 URI 장소에 그 이름으로 저장
예시 : 게시글 전체 수정
- HEAD 방식: 서버 측 데이터를 검색하고 요청하는 데 사용
예시 : 리소스 존재 여부 확인
- PATCH 방식 : 서버의 데이터를 부분 수정하는 데 사용
예시 : 댓글 일부 수정
- TRACE 방식: 요구 메시지의 최종 수신처까지 루프백을 검사하는 데 사용
HTTP 상태코드
- HTTP Response
- 클라이언트의 HTTP Request에 대한 응답 패킷
- 서버에서 쓰이는 프로토콜 버전, Request에 대한 실행 결과 코드, 간략한 실행 결과 설명문 내용이 담겨 있음
- 추가 정보로 전달할 데이터 형식, 길이 등이 MIME 형식으로 표현되어 있음
- 헤더 정보 뒤에는 실제 데이터(HTML 또는 이미지 파일)가 전달됨
- 데이터 전달이 끝나면 서버 연결을 끊음
실행 결과 코드 | 내용 | 설명 |
100번대 | 정보 전송 | HTTP 1.0까지는 계열에 대한 정의가 이루어지지 않았기 때문에 실험 용도 외에는 100번대 서버 측의 응답이 없다. |
200번대 | 성공 | 클라이언트의 요구가 성공적으로 수신 및 처리되었음을 의미한다. |
300번대 | 리다이렉션 | 해당 요구 사항을 처리하기 위해 사용자 에이전트가 수행해야 할 추가 동작이 있음을 의미한다. |
400번대 | 클라이언트 측 에러 | 클라이언트에 오류가 발생했을 때 사용한다. 예를 들면 클라이언트가 서버에 보내는 요구 메시지를 완전히 처리하지 못한 경우 등이다. |
500번대 | 서버 측 에러 | 서버 자체에서 발생한 오류 상황이나 요구 사항을 제대로 처리할 수 없을 때 사용한다. |
SSL (Secure Sockets Layer) 인증서
- SSL 인증서는 웹사이트와 사용자의 브라우저 간에 오가는 데이터를 암호화해서 정보를 안전하게 보호하는 기술입니다.
- 현재는 SSL의 후속 버전인 TLS (Transport Layer Security) 가 더 많이 사용됩니다.
- SSL 인증서가 왜 필요할까?
1. 데이터 암호화 : 비밀번호, 신용카드 정보 등 민감한 데이터 보호
2. 중간자 공격 방지 : 데이터가 가로채이더라도 해독 불가능
3. 신뢰성 확보 : 주소창의 자물쇠 아이콘, HTTPS 사용으로 사용자의 신뢰 확보
4. SEO 효과 : 구글 등 검색 엔진이 보안이 강화된 사이트를 우선 노출 - SSL 인증서 작동 방식
1. 클라이언트가 서버에 접속 → 안전한 통신을 위한 요청
2. 서버가 SSL 인증서 전달
3. 클라이언트가 유효성 검증
4. 공개키 기반으로 암호화된 세션 키 전달
5. 이후 세션 키로 양방향 암호화 통신! - SSL 인증서 종류
종류 설명 DV (Domain Validation) 도메인 소유 여부만 확인 OV (Organization Validation) 기업 정보까지 검증 EV (Extended Validation) 가장 강력! 기업 법적 존재 여부까지 검증, 주소창에 회사명 표시
실습
curl을 이용하여 HTTP요청 직접 보내보기
- curl 이란?
- curl은 command-line tool (명령줄 도구)로, URL을 통해 데이터를 전송하거나 받아올 수 있게 도와주는 프로그램이고, "Client URL" 의 줄임말입니다 - curl 사용법
옵션 | 설명 |
-X | HTTP 메서드 지정 (GET, POST, PUT, DELETE 등) |
-d | 요청 데이터 (POST, PUT 등) |
-H | 요청 헤더 추가 |
-F | 파일 전송 (multipart/form-data) |
-o | 출력 파일 이름 지정 |
-O | 원래 이름으로 파일 저장 |
-I | 응답 헤더 출력 |
-L | 리다이렉션 따라가기 |
-u | 기본 인증 (user:password) |
-c / -b | 쿠키 저장 / 사용 |
1. Google 메인 페이지 GET 요청
curl -L https://google.com
2. 응답 헤더만 보기
curl -I https://google.com
3. 파일로 저장해보기
curl -L -o google.html https://google.com
# 저장된 파일 확인
cat google.html
4. User-Agent 변경해서 요청
curl -L -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" https://google.com
5. HTTPS 인증서 정보 확인
curl -v https://google.com
# 또는 더 자세히
curl -vI https://google.com
6. HTTP/2 로 요청
- 윈도우 CMD 환경에서 실행 시
curl: option --http2: the installed libcurl version does not support this
curl: try 'curl --help' for more information 오류가 뜨며 리눅스에서 실행하였습니다.
- 원인은 현재 윈도우에 깔려 있는 curl이 HTTP/2 프로토콜을 지원하지 않는다고 합니다.
curl -L --http2 https://google.com
7. 헤더 추가(Google 은 대부분 기본 헤더로 충분하지만, 실습용)
curl -L -H "Accept-Language: en-US" https://google.com
8. 쿠키 저장하고 재사용
curl -L -c cookies.txt https://google.com
curl -L -b cookies.txt https://google.com
9. 요청 시간 측정
- 명령어를 실행하기 위해 curl-format.txt를 만들어야 한다.
#vi 편집기로 curl- format.txt 만들기
vi curl-format.txt
# 아래 명령어 입력 후 저장하기
melookup: %{time_namelookup}\n
time_connect: %{time_connect}\n
time_appconnect: %{time_appconnect}\n
time_pretransfer: %{time_pretransfer}\n
time_redirect: %{time_redirect}\n
time_starttransfer: %{time_starttransfer}\n
----------\n
time_total: %{time_total}\n
- curl-format.txt를 만든 후 아래 명령어를 실행하면 실행 결과를 확인할 수 있다.
curl -L -w "@curl-format.txt" -o /dev/null -s https://google.com
10. 요청 결과를 더 깔끔하게 보기(progress bar 안 보기)
curl -L -s https://google.com
웹 브라우저 개발자 도구를 사용하여 웹 사이트의 HTTP 통신을 살펴보기
1. 개발자 도구 열기
- 웹사이트 열기 (예: https://google.com)
- 단축키 : F12 또는 Ctrl + Shift + I 또는 마우스 우클릭 → "검사"

2. Network (네트워크) 탭 선택
- 상단 탭에서 Network 선택
- 이 탭에서 브라우저가 웹 서버와 주고받는 모든 요청/응답을 볼 수 있어요.

3. 페이지 새로고침
- 개발자 도구는 새로고침하면서 모든 네트워크 트래픽을 기록합니다.
- Ctrl + R 또는 주소창 옆 새로고침 버튼 클릭
4. HTTP 요청 분석하기
- 요청 목록이 쭉 뜨면 원하는 요청 클릭
Headers 탭 : 요청 URL, 요청 메서드 (GET, POST 등), 요청 헤더 / 응답 헤더, Status code (200, 301, 404 등)
Preview 탭 : HTML, JSON 등 응답 본문 미리보기
Response 탭 : 실제 응답 원본
Timing 탭 : 요청 시간 분석 (DNS, 연결, 응답 속도)

참고
https://security-student.tistory.com/22
'ELITE HACKER Bootcamp 4th > 1주차' 카테고리의 다른 글
[1주차 TIL] KnockOn Bootcamp 프록시 (0) | 2025.04.06 |
---|---|
[1주차 TIL] KnockOn Bootcamp 패킷 (0) | 2025.04.06 |
[1주차 TIL] KnockOn Bootcamp Cookie & Session (0) | 2025.04.05 |
[1주차 TIL] KnockOn Bootcamp Protocol (0) | 2025.04.05 |
[1주차 TIL] KnockOn Bootcamp 웹이란 (0) | 2025.04.05 |