Post

[HTTP 완벽 가이드 정리] 01. HTTP: 웹의 기초 - 01. HTTP 개관

1장 HTTP 개관에서는 HTTP를 빠르게 훑어본다.

[HTTP 완벽 가이드 정리] 01. HTTP: 웹의 기초 - 01. HTTP 개관

📝 핵심 요약

주제요약
HTTP인터넷의 공통 언어
클라이언트와 서버클라이언트(브라우저) 요청(request) <-> 서버 응답(response)
리소스서버에 존재하는 모든 콘텐츠 (HTML, 이미지, 동영상, 동적 페이지 등)
정적/동적 모두 포함
MIME 타입데이터 형식
URI (URL, URN)리소스 주소 (URL은 위치 기반, URN은 이름 기반)
HTTP 메서드리소스에 대한 동작 정의
HTTP 상태코드서버 응답 결과
HTTP 메시지 구조시작 줄(start line) + 헤더(header) + 바디(body)
TCP/IP 연결HTTP는 TCP를 기반으로 동작
순서 보장, 무결성 보장, 보통 포트 80
아키텍처 구성요소프록시(Proxy), 캐시(Cache), 게이트웨이(Gateway), 터널(Tunnel), 에이전트(Agent)




1. HTTP란?

✅ 정의

HTTP(Hypertext Transfer Protocol)는 웹 상에서 클라이언트와 서버가 정보를 주고받을 때 사용하는 텍스트 기반 애플리케이션 계층 프로토콜

📌 특징

  • 웹의 핵심 통신 규약

  • 텍스트 기반으로 사람이 읽기 쉬움

  • TCP 위에서 작동 → 신뢰성 있는 데이터 전송




2. 웹 클라이언트와 서버

🖥️ 클라이언트 (Client)

  • 요청을 보내는 주체 (예: 브라우저, Postman, curl)

🗄️ 서버 (Server)

  • 요청을 받아 응답을 생성하는 주체 (예: Apache, Nginx, Spring Boot)

🔄 상호작용 흐름

  1. 사용자가 URL을 입력

  2. 브라우저가 요청 생성 → 서버에 전송

  3. 서버가 응답 생성 → 브라우저에 전송

  4. 브라우저가 응답 렌더링




3. 리소스 & MIME 타입

📦 리소스란?

  • 서버에 존재하는 콘텐츠(정적 HTML, 이미지, JSON, 동영상 등)

  • 정적/동적 모두 가능

🎨 MIME 타입

  • MIME(Multipurpose Internet Mail Extensions)은 원래 각기 다른 전자메일 시스템 사이에서 메시지가 오갈 때 겪는 문제점을 해결하기 위해 설계됨

  • 콘텐츠의 형식을 나타냄

  • 서버는 응답 시 Content-Type 헤더로 MIME 타입을 전달함

💡 MIME 타입 예시

MIME Type설명
text/htmlHTML 문서
image/jpegJPEG 이미지
application/jsonJSON 데이터

브라우저는 MIME 타입을 기반으로 콘텐츠를 처리




4. URI (URL, URN)

🔍 URI (Uniform Resource Identifier)

  • 리소스를 식별하는 모든 방식의 총칭

📍 URL (Locator)

  • 위치를 기반으로 리소스를 식별

  • 예: http://example.com/index.html

📛 URN (Name)

  • 이름으로 리소스를 식별 (위치와 무관)

  • 예: urn:isbn:1234567890

🧩 URL 구성

1
2
http://www.example.com:80/images/logo.png
└─[프로토콜]://[호스트]:[포트]/[경로]

오늘날 대부분의 URI는 URL




5. HTTP 메서드

💡 흔히 쓰이는 HTTP 메서드 예시

메서드설명예시
GET리소스 조회게시글 보기
POST데이터 생성/전송회원가입 요청
PUT전체 리소스 수정프로필 정보 덮어쓰기
DELETE리소스 삭제댓글 삭제
HEAD헤더만 요청리소스 존재 여부 확인




6. 상태 코드

💡 흔히 쓰이는 HTTP 상태 코드 예시

코드의미설명
200OK요청 성공 처리
302Found임시 리디렉션
404Not Found리소스 없음
500Internal Server Error서버 내부 오류

클라이언트는 이 코드를 기반으로 처리 흐름을 결정




7. HTTP 메시지 구조

🧩 구성 요소

  1. 시작줄: 요청 또는 응답의 첫 줄로, 요청 시 무엇을 해야 하는지 응답 시 무슨 일이 일어났는지 나타냄

  2. 헤더: 키-값 형식의 메타데이터 (예: Content-Type, User-Agent)

  3. 본문: 실제 데이터 (옵션)

💡 예시

1
2
3
GET /tools.html HTTP/1.1
Host: www.joes-hardware.com
Accept: text/html

💡 실제 요청 원본 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
GET /posts/http-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-%EC%A0%95%EB%A6%AC-01-http-%EC%9B%B9%EC%9D%98-%EA%B8%B0%EC%B4%88-01-http-%EA%B0%9C%EA%B4%80/ HTTP/1.1 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7 
Accept-Encoding: gzip, deflate, br, zstd 
Accept-Language: ko-KR,ko;q=0.9 
Cache-Control: no-cache 
Connection: keep-alive 
Host: localhost:4000 
Pragma: no-cache 
Referer: http://localhost:4000/ 
Sec-Fetch-Dest: document 
Sec-Fetch-Mode: navigate 
Sec-Fetch-Site: same-origin 
Sec-Fetch-User: ?1 
Upgrade-Insecure-Requests: 1 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36 
sec-ch-ua: "Google Chrome";v="135", "Not-A.Brand";v="8", "Chromium";v="135" 
sec-ch-ua-mobile: ?0 
sec-ch-ua-platform: "macOS"

💡 실제 응답 원본 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
HTTP/1.1 200 OK 
Etag: 157e0af-a40b-6801e5b2 
Content-Type: text/html; charset=utf-8 
Content-Length: 41995 
Last-Modified: Fri, 18 Apr 2025 05:40:02 GMT 
Cache-Control: private, max-age=0, proxy-revalidate, no-store, no-cache, must-revalidate 
Server: WEBrick/1.9.1 (Ruby/3.4.1/2024-12-25) 
Date: Fri, 18 Apr 2025 05:53:13 GMT 
Connection: Keep-Alive

// 응답 본문
<!doctype html>
<html lang="ko">
  ...
</html>




8. TCP/IP와 HTTP

🧱 HTTP 네트워크 프로토콜 스택

1
2
3
4
5
[HTTP] - Application Layer
[TCP]  - Transport Layer
[IP]   - Network Layer
[네트워크를 위한 링크 인터페이스] - Data Link Layer
[물라적인 네트워크 하드웨어]     - Physical Layer

🔐 TCP의 특성

  • 데이터 손실 없음

  • 전송 순서 보장

  • 연결형 통신

🛠️ TCP의 주요 기능

  • 신뢰성 보장: 데이터 손실/중복 없이 전송

  • 순서 보장: 받은 순서 = 보낸 순서

  • 흐름 제어: 수신자가 감당 가능한 속도로 전송

  • 혼잡 제어: 네트워크 상태에 따라 전송량 조절

HTTP는 TCP의 안정성 위에서 동작 하며, 데이터를 ‘어떻게 보낼지’는 TCP에게 맡기고, 자신은 ‘무엇을 보낼지’에 집중하는 고수준 프로토콜




9. 요청/응답 흐름 요약

  1. URL 입력

  2. DNS 조회 → IP 주소 획득

  3. 포트 번호 확인 (기본 80)

  4. TCP 연결 수립

  5. HTTP 요청 전송

  6. 서버 응답 수신

  7. 연결 종료 및 렌더링




10. 아키텍처 구성 요소

구성요소역할예시
Proxy중계 서버보안 필터링, 로깅
Cache리소스 저장CDN, 브라우저 캐시
Gateway프로토콜 변환HTTP → FTP
Tunnel암호화 통신 중계HTTPS 통신
Agent자동화 클라이언트검색 엔진 크롤러



This post is licensed under CC BY 4.0 by the author.