HTTP와 HTTPS
🍀 이번 학습에서는 인터넷 통신의 핵심인 HTTP와 보안이 강화된 HTTPS를 이해하고, 주요 개념과 실습 방법을 다룹니다. 이를 통해 HTTP 요청 및 응답의 구조를 이해하고, 이를 활용한 네트워크 통신의 기초를 익힐 수 있습니다.
1. HTTP란?
HTTP(HyperText Transfer Protocol)는 웹 상에서 클라이언트(주로 웹 브라우저)와 서버 간의 데이터 전송을 위한 프로토콜입니다. 포트는 80번을 사용합니다.
- 특징:
- 비연결성: 요청-응답이 끝나면 연결을 종료합니다.
- 상태 비저장(Stateless): 이전 요청의 상태를 기억하지 않습니다.
- 주로 텍스트, 이미지, 비디오, JSON 등 다양한 데이터 형식을 전송합니다.
HTTP의 동작 방식
1. 클라이언트의 요청
클라이언트(웹 브라우저)가 HTTPS 웹사이트에 접속을 요청합니다.
2. SSL/TLS 핸드셰이크
브라우저와 서버는 SSL/TLS 핸드셰이크를 통해 안전한 통신 채널을 설정합니다. 서버 인증서 검증이 포함됩니다.
3. 암호화된 통신
설정된 안전한 채널을 통해 모든 데이터는 암호화되어 전송됩니다.
4. 서버 응답
서버는 클라이언트의 요청에 대한 응답을 암호화하여 전송합니다.
5. 복호화
클라이언트는 받은 데이터를 복호화하여 표시합니다.
2. HTTP와 HTTPS
HTTPS(HyperText Transfer Protocol Secure)는 HTTP에 SSL/TLS 암호화를 추가한 프로토콜로, 보안성이 강화된 HTTP입니다. 포트는 443번을 사용합니다.
- HTTP:
- 데이터를 평문(Plain Text)으로 전송.
- 중간자 공격(Man-in-the-Middle Attack) 등의 위험이 있음.
- HTTPS:
- SSL/TLS 암호화로 데이터 전송 시 기밀성, 무결성, 인증성을 제공.
- URL 앞에 https://를 사용
3. HTTP 헤더와 바디의 구조
HTTP 요청과 응답은 헤더(Header)와 바디(Body)로 구성됩니다.
1) 요청(Request) 구조:
GET /index.html HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0 Accept: text/html
- 시작 줄(Start Line):
- 요청 메서드(GET), 요청 URI(/index.html), HTTP 버전(HTTP/1.1)
- 헤더(Header):
- 요청의 추가 정보를 포함 (Host, User-Agent, Accept).
- 바디(Body):
- POST/PUT 메서드와 같이 데이터를 전송할 때 사용.
2) 응답(Response) 구조:
HTTP/1.1 200 OK Content-Type: text/html Content-Length: 123
- 상태 줄(Status Line):
- HTTP 버전, 상태 코드, 상태 메시지(200 OK).
- 헤더(Header):
- 응답에 대한 추가 정보 (Content-Type, Content-Length).
- 바디(Body):
- 요청한 리소스의 실제 데이터.
4. HTTP 메서드
HTTP 메서드는 클라이언트가 서버에 요청하는 작업 유형을 나타냅니다.
GET | 데이터를 요청. URL에 요청 데이터 포함. 주로 조회에 사용. |
POST | 데이터를 전송. 요청 바디에 데이터 포함. 주로 데이터 생성 및 제출에 사용. |
PUT | 데이터를 수정하거나 추가. 요청 바디에 데이터를 포함. |
DELETE | 데이터를 삭제. |
HEAD | GET 요청과 동일하지만, 응답 바디를 포함하지 않음. 헤더 정보만 확인할 때 사용. |
OPTIONS | 서버에서 지원하는 메서드와 기능을 조회. |
PATCH | 리소스의 일부를 수정. |
5. HTTP 상태 코드
서버가 클라이언트 요청에 대해 반환하는 응답 상태를 나타냅니다.
1xx | 정보 응답 | 요청이 처리 중임을 나타냄. |
2xx | 성공 | 200 OK: 요청 성공, 201 Created: 리소스 생성 완료. |
3xx | 리다이렉션 | 301 Moved Permanently: URL 변경. |
4xx | 클라이언트 오류 | 404 Not Found: 요청한 리소스가 없음. |
5xx | 서버 오류 | 500 Internal Server Error: 서버 오류. |
6. SSL 인증서
SSL 인증서는 HTTPS 통신에서 클라이언트와 서버 간의 보안 연결을 설정하기 위해 사용됩니다.
- 역할:
- 서버의 신원을 인증.
- 클라이언트와 서버 간 데이터 암호화.
- 구성:
- 공용 키(Public Key)와 비공용 키(Private Key)를 사용한 공개 키 암호화.
- 발급 과정:
- 서버는 인증 기관(CA)에 인증서를 요청.
- CA는 서버의 신원을 검증 후 인증서를 발급.
- 인증서는 클라이언트와 서버 간에 공유되어 보안을 보장.
실습
1. curl을 이용하여 HTTP 요청 보내기
curl 명령어를 사용해 HTTP 요청을 직접 전송하고, 응답을 확인할 수 있습니다.
기본 GET 요청
curl https://www.google.com
HTTP 헤더 확인
curl -I https://www.naver.com
이외에도 curl 명령을 통하여 POST 요청 보내기, JSON 데이터 전송, 인증 요청, 파일 업로드, HTTP 상태 코드 확인, 등 다양한 HTTP요청을 진행할 수 있다.
2. 웹 브라우저 개발자 도구 사용
- 웹 브라우저(예: Chrome)의 개발자 도구를 활용해 HTTP 요청과 응답을 살펴봅니다.
- F12 키를 눌러 개발자 도구를 열고 Network 탭으로 이동.
- 웹 페이지를 새로고침(F5)하면 모든 요청이 표시됩니다.
- 요청을 선택하여 헤더, 바디, 상태 코드 등을 확인합니다.
'KnockOn > 1주차 TIL' 카테고리의 다른 글
[1주차 TIL] KnockOn Bootcamp - 프록시 (1) | 2024.12.07 |
---|---|
[1주차 TIL] KnockOn Bootcamp - 패킷 (0) | 2024.12.07 |
[1주차 TIL] KnockOn Bootcamp - 쿠키와 세션 (0) | 2024.12.07 |
[1주차 TIL] KnockOn Bootcamp - 프로토콜 (1) | 2024.12.07 |
[1주차 TIL] KnockOn Bootcamp - 웹이란? (0) | 2024.12.04 |