◇ 공부 기록용으로 작성하였으니 틀린점, 피드백 주시면 감사하겠습니다 ◇
HTTP와 HTTPS는 둘 다 인터넷에서 정보를 주고받기 위한 프로토콜📜이다.
(웹에서 데이터를 주고받기 위한 텍스트 기반의 프로토콜이다)
HTTP가 먼저 나오고 그 다음에 HTTP에서 보안을 강화시킨 HTTPS가 나왔다
결론
HTTP와 HTTPS의 핵심적인 차이점은 🔑보안(데이터 암호화)의 유무이다.
HyperText Transfer Protocol vs. HyperText Transfer Protocol Secure
HTTP와 HTTPS의 차이점
HTTP | HTTPS | |
보안 | 보안 기능 없다 | 데이터를 암호화하여 전송한다 → 보안 강화 |
SSL/TLS 프로토콜 | 사용하지 않음 | SSL/TLS를 사용한다 웹 서버가 SSL/TLS 인증서를 사용해야 한다. |
사용 포트 | 80번 | 443번 |
URL | http://~ | https://~ |
🔍 SEO (Search Engine Optimization, 검색엔진 최적화)
요즘의 검색 엔진(ex. Google)은 안전한 웹 사이트를 우선시하는 추세이다.
그래서 보안이 강화된 HTTPS의 사이트는 검색 엔진에서 더 우선시된다.
📜 HTTP 프로토콜 작동 방식
HTTP는 웹 브라우저와 웹 서버 사이의 표준 통신 규약이다.
여기에는 요청(Request)과 응답(Response)이라는 두 가지 주요 개념이 포함되어 있다.
🧑 클라이언트의 요청:
사용자가 웹 브라우저를 통해 웹사이트에 접속
→ 브라우저는 해당 웹사이트에 HTTP 요청을 보냄
HTTP 요청
HTTP 요청에는 사용자가 요청하는 리소스(HTML 문서, 이미지, CSS 파일 등)와 함께 요청 메서드(GET, POST, 등) 및 다양한 헤더 정보를 포함한다.
🗄️ 서버의 응답:
서버는 클라이언트의 요청을 받고, 해당 요청에 대한 응답을 생성한다.
응답에는 HTTP 상태 코드와 함께 응답 헤더(header)와 본문(body)을 포함한다.
HTTP 상태 코드 예시
- 200 - OK(정상)
- 400 - Bad request(잘못된 요청)
- 404 - Resource not found(리소스를 찾을 수 없음)
이 외에도 다양한 HTTP 상태코드가 있다
🎯 HTTP 특징
Stateless 프로토콜 (무상태)
HTTP는 상태를 저장하지 않는(Stateless) 프로토콜이다.
각 요청은 이전 요청과 독립적이며, 서버는 클라이언트의 상태를 유지하지 않는다.
이는 서버에 부담을 덜어줍니다.
🗄️ 예시)
상태 유지(Statefull)의 경우:
- 사용자가 검색창에 검색어를 입력.
- 검색 엔진 서버는 사용자의 과거 검색 기록, 위치 정보 등을 고려하여 검색 결과를 제공.
- 사용자가 특정 결과를 클릭하면, 검색 엔진은 사용자가 선택한 결과를 고려하여 이후 검색 결과를 조정할 수 있도록 상태를 기록한다.
무상태(Stateless)의 경우:
- 사용자가 검색창에 검색어를 입력.
- 검색 엔진 서버는 검색어 대한 결과를 제공하며, 사용자의 이전 검색 기록이나 상태를 고려하지 않는다.
- 사용자가 특정 결과를 클릭하면, 검색 엔진은 해당 클릭에 대한 로그를 남기거나 일시적인 정보를 제공할 수 있지만, 사용자의 검색 상태를 계속 기억하지 않는다.
요청 메서드 (Method)
HTTP 요청에는 여러 종류의 메서드가 있다.
가장 일반적인 메서드는 GET와 POST이다. 그 외에도 PUT(리소스 업데이트), DELETE(리소스 삭제) 등 총 9 개 정도의 메소드 있다.
GET
GET은 서버로부터 정보(데이터)를 요청하기 위해 사용
- GET 요청은 오로지 데이터를 읽을(Read) 때만 사용되고 수정할 때는 사용하지 않는다.
- 📁 데이터 전송: GET을 요청 할 때 URL 주소 끝에 쿼리 파라미터(query parameters)라는 것을 포함해서 데이터를 전달.
- 🔒 보안: URL에 노출되기 때문에 민감한 데이터(예: 비밀번호)를 전달하는 데는 적합하지 않다.
- 💾 캐시: 결과가 캐시될 수 있으며, 브라우저 히스토리에 남습니다.
- Idempotent: 동일한 요청을 여러 번 보내더라도 동일한 결과를 가져온다.
POST
POST는 서버의 리소스를 생성/업데이트하기 위해 서버에 정보(데이터)를 보내는 데 사용
- 📁 데이터 전송: POST를 요청 할 때 HTTP 메시지의 Body에 담아서 전송. GET과 달리 데이터는 URL에 노출시키지 않는다.
- 🔒 보안: 데이터를 요청 Body 에 포함시켜 전송하기 때문에, GET에 비해 비교적 보안에 강함.
- 💾 캐시: 결과가 캐시되지 않으며, 브라우저 히스토리에도 남지 않습니다.
- Idempotent: 일반적으로 idempotent하지 않습니다. 동일한 요청을 여러 번 보내면 다른 결과를 가져올 수 있다.
👉 "Idempotent" 👈
연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질
HTTP의 Request/Response 메시지 구조
HTTP의 메시지는 기본적으로 헤더(Header)와 본문(Body)으로 구성되어있다.
HTTP 의 요청은 요청 라인, 헤더(Header), 본문(Body)으로 구성.
HTTP 의 응답은 상태 라인, 헤더(Header), 본문(Body)으로 구성.
HTTP 요청 구조:
Request Line (요청 라인)
예시)
GET /index.html HTTP/1.1
- HTTP 메서드: GET, POST 등
- 요청 URI(Uniform Resource Identifier): 요청 대상 리소스의 경로
- HTTP 버전
Request Headers (요청 헤더)
예시)
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Content-Type: application/json
- Host: 요청을 보내는 서버의 호스트 정보
- User-Agent: 클라이언트 소프트웨어의 정보
- Accept: 클라이언트가 지원하는 미디어 타입
- Content-Type: 요청 본문의 미디어 타입 (POST 요청 등에서 사용)
- 기타 등등...
Request Body (요청 본문)
POST 또는 PUT과 같은 메서드로 전송되는 데이터
예시)
{
"key": "value"
}
HTTP 응답 구조:
Status Line (상태 라인)
예시)
HTTP/1.1 200 OK
- HTTP 버전: HTTP/1.1
- 상태 코드: 200
- 상태 메시지: OK
Response Headers (응답 헤더)
예시)
Date: Mon, 13 Feb 2024 12:00:00 GMT
Server: Apache/2.4.29 (Unix)
Content-Type: text/html; charset=utf-8
Content-Length: 1234
- Date: 응답이 생성된 날짜 및 시간
- Server: 웹 서버의 정보
- Content-Type: 응답 본문의 미디어 타입
- Content-Length: 응답 본문의 크기
- 기타 등등...
Response Body (응답 본문)
서버에서 클라이언트로 전송되는 데이터
예시)
<!DOCTYPE html>
<html>
<head>
<title>Example Page</title>
</head>
<body>
<h1>Hello, World!</h1>
</body>
</html>
HTTPS 프로토콜은 어떻게 작동하나요?
HTTP는 암호화하지 않고 데이터를 서버에 전송한다.
즉, 전송 과정에서 중간에 제3자가 데이터를 가로챌 수 있다. (⛔ 위험하다)
→ 🔒 보안 문제를 해결하기 위해, 보안 계층을 추가된 HTTPS가 생겼다
HTTPS는 HTTP 요청 및 응답을 SSL/TLS 기술에 결합했다. (HTTPS = HTTP + SSL/TLS)
즉 HTTPS 작동 방식을 이해위해서는 SSL/TLS를 알아야한다.......
SSL/TLS 작동방식은 아래 링크
https://jibinary.tistory.com/169
📜 HTTP 역사
- HTTP/0.9 (1991): 가장 초기 버전으로 GET 메서드만을 지원, 단순한 형태의 프로토콜
- HTTP/1.0 (1996): 여러 메서드 (GET, POST, HEAD 등)를 도입하고, 헤더와 상태 코드를 추가하여 확장성을 높였다.
- HTTP/1.1 (1997)
- HTTP/2 (2015)
- HTTP/3 (2018): 최근 버전
참고 자료: https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP
'네트워크' 카테고리의 다른 글
[DNS 네트워크] nslookup 명령어란? 쉽게 개념 정리 (0) | 2024.03.28 |
---|---|
[CDN 네트워크] Akamai란? 쉽게 개념 정리 (Akamai Technologies, Inc.) (0) | 2024.03.28 |
[네트워크] SSL/TLS 쉽게 개념 및 특징 정리 (0) | 2024.03.01 |
[네트워크] OSI 모델 (OSI 7-Layer Model) 아주 쉽게 개념 정리 (0) | 2024.02.29 |
[네트워크] RESTful API란? 쉽게 개념 및 특징 정리 (REST와 REST API) (0) | 2024.02.27 |