-
Notifications
You must be signed in to change notification settings - Fork 1
Description
π€μ§κΈμ λͺ¨λ κ²μ HTTP νλ‘ν μ½μ λ΄μμ μ μ‘ν©λλ€.
HTTPλ νμ΄νΌν
μ€νΈ νΈλμ€νΌ νλ‘ν μ½ μ΄λ λ»μ
λλ€.
β¨λͺ¨λ κ²μ΄λ ?
- HTML, TEXT
- μ΄λ―Έμ§, μμ±, μμ, νμΌ
- JSON, XML(API)
- κ±°μ λͺ¨λ ννμ λ°μ΄ν° μ μ‘ κΈ°λ₯
μλ²κ°μ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°μ λλ λλΆλΆ HTTP μ¬μ©
π₯ κ²°λ‘
μ§κΈμ HTTP μλλ€.
TCPλ₯Ό μ§μ μ°κ²°ν΄μ νλ κ²½μ°μλ κ²μμλ²λ νΉμνκ²½μ°μλ§ νλ€.
μ¬μ§μ΄ μμ¦ λͺ¨λ°μΌ κ²μ κ°μ κ²½μ°μλ HTTPλ‘ ν΅μ νλ κ΅¬μ‘°λ‘ κ°λ°νλ€.
HTTP λΌλκ² μκ°μ΄ νλ₯΄λ©΄μ κ±°μ λͺ¨λ κ²μ μ μ‘ν μ μλλ‘ λ°λμλ€.
π HTTPμ μμ¬
- HTTP/0.9 1991λ : GET λ©μλλ§ μ§μ, HTTP ν€λX
- HTTP/1.0 1996λ : λ©μλ, ν€λ μΆκ°
- β¨HTTP/1.1 1997λ : κ°μ₯ λ§μ΄ μ¬μ©νκ³ μ°λ¦¬μκ² κ°μ₯ μ€μν λ²μ μ΄λ€ β¨
- HTTP/2 2015λ : μ±λ₯ κ°μ
- HTTP/3 μ§νμ€ : TCP λμ μ UDPλ₯Ό μ¬μ©, μ±λ₯ κ°μ
π» κΈ°λ° νλ‘ν μ½
TCP : HTTP/1.1, HTTP/2
UDP : HTTP/3
νμ¬ HTTP/1.1 μ£Όλ‘ μ¬μ©νλ€.
HTTP/2, HTTP/3 λ μ μ μ¦κ°νλ μΆμΈλ€.
κ·Όλ° μ°λ¦¬λ HTTP/1λ§ λ°°μλμΌλ©΄ λλ€. μλλ©΄ HTTP/2λ HTTP/3λ μ±λ₯κ°μ λ§ ν κ²μ΄κΈ° λλ¬Έ!
νλ‘ν μ½ νμΈνλ €λ©΄ κ°λ°μ λꡬμμ μ΄λ κ² νλ‘ν μ½μ μΈν ν΄μ£Όλ©΄ λλ€. HTTP 1μ λ€ μ°κ³ μκ³ HTTP2 μμ¦ λ§μ΄ μ¬μ©νλ μ€μ΄λ€.
β ν΄λΌμ΄μΈνΈ μλ² κ΅¬μ‘°
- Request / Response ꡬ쑰
- ν΄λΌμ΄μΈνΈλ μλ²μ μμ²μ 보λ΄κ³ , μλ΅μ λκΈ°νλ€.
- μλ²κ° μμ²μ λν κ²°κ³Όλ₯Ό λ§λ€μ΄μ μλ΅νλ€.
ν΄λΌμ΄μΈνΈμ μλ²μ κ°λ
μ μΌλ‘ λΆλ¦¬λ₯Ό νλ€.
λΉμ¦λμ€ λ‘μ§μ΄λ λ°μ΄ν°λ μλ²μ λ€ λ°μ΄λ£λλ€.
ν΄λΌμ΄μΈνΈλ UI κ·Έλ¦¬κ³ μ¬μ©μ±μλ§ μ§μ€μ νλ€.
μ΄λ κ²νλ©΄ ν΄λΌμ΄μΈνΈμ μλ²κ° κ°κ° λ 립μ μΌλ‘ μ§νν μκ° μλ€.
π 무μν νλ‘ν μ½ (Stateless)
- μλ²κ° ν΄λΌμ΄μΈνΈμ μνλ₯Ό 보쑴 νμ§ μλλ€.
(Stateful μνλ₯Ό μ μ§νλ€λ κ²μ΄κ³ Stateless μνλ₯Ό μ μ§νμ§ μλλ€λ κ²μ΄λ€.)
μ΄ν΄νκΈ° μ¬μ΄ μ€λͺ
π₯ Statefull
- μν©1. λ ΈνΈλΆμ ꡬ맀νλλ° μ§μ1νν λ ΈνΈλΆ 2κ°μ κ°κ²©μ΄ μΌλ§μΈμ§ μκ³ μ μ©μΉ΄λλ‘ κ±°λλ₯Ό νλ€.
- μν©2. λ ΈνΈλΆμ ꡬ맀νλλ° μ§μ2νν μ£Όμ΄(λ ΈνΈλΆ)λ₯Ό μλ§νκ³ 2κ° κ΅¬λ§€νλ€ λ§νκ³ , μ§μ 3νν μ μ©μΉ΄λλ‘ κ΅¬λ§€νκ² λ€κ³ νλ€. κ·ΈλΌ μ§μ 2μ μ§μ 3μ΄ λ¬΄μμ μΌλ§μ μ¬λμ§λ₯Ό λͺ¨λ₯Έλ€.
μν©1μ²λΌ μ§μ ν λͺ νκ³ λ§ κ±°λκ° κ°λ₯νλ€λ κ². μν©2λ μ§μλ€μ΄ contextλ₯Ό λͺ¨λ₯΄λκΉ μν© μ₯μ κ° λ°μνλ€. νμ§λ§ Stateless κ²½μ°μλ
π₯ Stateless
μμ μν©2μ²λΌ λ
ΈνΈλΆμ ꡬ맀νλλ° μ§μ2νν
μ£Όμ΄(λ
ΈνΈλΆ)λ₯Ό μλ§νκ³ 2κ° κ΅¬λ§€νλ€ λ§νκ³ , μ§μ 3νν
μ μ©μΉ΄λλ‘ κ΅¬λ§€νκ² λ€κ³ νλ©΄ μ§μ 2μ μ§μ 3μ΄ λ
ΈνΈλΆμ 2κ°λ₯Ό μ μ©μΉ΄λλ‘ κ΅¬λ§€ νκ² λ€κ³ μ΄λ―Έ λ€ μλ μνλ€. μ΄κ² λ°λ‘ Statelessμ μ₯μ μ΄λ€. νμ₯μ±μ΄ λλ€λ κ².
- **μν μ μ§ **: μ€κ°μ λ€λ₯Έ μ μμΌλ‘ λ°λλ©΄ μλλ€. (μ€κ°μ λ€λ₯Έ μ μμΌλ‘ λ°λ λ μν μ 보λ₯Ό λ€λ₯Έ μ μμκ² λ―Έλ¦¬ μλ €μ€μΌνλ€.)
- 무μν : μ€κ°μ λ€λ₯Έ μ μμΌλ‘ λ°λμ΄λ λλ€.
- κ°μκΈ° κ³ κ°μ΄ μ¦κ°ν΄λ μ μμ λκ±° ν¬μ ν μ μλ€.
- κ°μκΈ° ν΄λΌμ΄μΈνΈ μμ²μ΄ μ¦κ°ν΄λ μλ²λ₯Ό λκ±° ν¬μ ν μ μλ€.
- 무μνλ μλ΅ μλ²λ₯Ό μ½κ² λ°κΏ μ μλ€. -> 무νν μλ² μ¦μ€ κ°λ₯
- μ₯μ : μλ² νμ₯μ± λμ (μ€μΌμΌ μμ)
- λ¨μ : ν΄λΌμ΄μΈνΈκ° μΆκ° λ°μ΄ν° μ μ‘
μ΄μ²λΌ **Statefull(μνμ μ§)**μ μ€κ°μ μλ²κ° μ₯μ λλ©΄ μμ
μ λ€μ ν΄μΌνλ€.
Stateless(무μν)λ μ무 μλ²λ νΈμΆν΄λ λλ€. μ²μλΆν° ν΄λΌμ΄μΈνΈκ° μλ²μ μμ²μ ν λ λ°μ΄ν°λ₯Ό λ€ λ΄μμ μμ²νλ€.
κ·Έλ¬λ©΄ μλ²λ μνλ₯Ό 보κ΄νμ§ μκ³ κ·Έλ₯ μλ΅λ§ ν΄μ€λ€.
ν΄λΌμ΄μΈνΈκ° μλ²1μ μμ²μ νκ³ μλ²1μ μ₯μ κ° μκΈ°λ©΄ μ€κ³μλ²κ° λ€λ₯Έ μλ²2λ‘ λ겨μ€λ€. κ·Έλμ νμ₯μ±μ΄ μ’λ€.
β μ€λ¬΄νκ³
-
λͺ¨λ κ²μ 무μνλ‘ μ€κ³ ν μ μλ κ²½μ°λ μκ³ μλ κ²½μ°λ μλ€.
-
무μν : λ‘κ·ΈμΈμ΄ νμ μλ λ¨μν μλΉμ€ μκ° νλ©΄
-
μν μ μ§ : λ‘κ·ΈμΈ
-
λ‘κ·ΈμΈν μ¬μ©μμ κ²½μ° λ‘κ·ΈμΈ νλ€λ μνλ₯Ό μλ²μ μ μ§
-
μΌλ°μ μΌλ‘ λΈλΌμ°μ μΏ ν€μ μλ² μΈμ λ±μ μ¬μ©ν΄μ μν μ μ§νλ€.
-
μν μ μ§λ μ΅μνλ§ μ¬μ©νλκ² μ’λ€. (λ‘κ·ΈμΈκ°μ κ²½μ°)
π λΉμ°κ²°μ±
μμ²μνκ³ μλ΅μ νλ©΄ TCP/IP μ°κ²°μ μ’ λ£ν΄ λ²λ¦°λ€.
μ₯μ
- HTTPλ κΈ°λ³Έμ΄ μ°κ²°μ μ μ§νμ§ μλ λͺ¨λΈ
- μΌλ°μ μΌλ‘ μ΄ λ¨μμ μ΄νμ λΉ λ₯Έ μλλ‘ μλ΅
- 1μκ° λμ μμ²λͺ
μ΄ μλΉμ€λ₯Ό μ¬μ©ν΄λ μ€μ μλ²μμ λμμ μ²λ¦¬νλ μμ²μ μμκ° μ΄νλ‘ λ§€μ° μλ€.
(μ) μΉ λΈλΌμ°μ μμ κ³μ μ°μν΄μ κ²μ λ²νΌμ λλ₯΄μ§λ μλλ€. - μλ² μμμ λ§€μ° ν¨μ¨μ μΌλ‘ μ¬μ©ν μ μμ
λ¨μ
- TCP/IP μ°κ²°μ μλ‘ λ§Ίμ΄μΌ νλ€. μ¦, 3way handshake μκ° μΆκ°
- μΉ λΈλΌμ°μ λ‘ μ¬μ΄νΈλ₯Ό μμ²νλ©΄ HTML λΏλ§ μλλΌ μλ°μ€ν¬λ¦½νΈ, css, μΆκ° μ΄λ―Έμ§ λ±λ± μλ§μ μμμ΄ ν¨κ» λ€μ΄λ‘λλλ€.
- μ§κΈμ HTTP μ§μ μ°κ²°λ‘ λ¬Έμ ν΄κ²°
- HTTP/2, HTTP/3μμ λ λ§μ μ΅μ νκ° νμ
β HTTP λ©μμ§ (μ μΌ μ€μ) β
μμλΌμΈ, ν€λ, 곡백(μ΄ λΆλΆμ 무쑰건 μμ΄μΌνλ€.), λ©μμ§λ°λ μ΄λ κ² κ΅¬μ±λμ΄μλ€.
HTTP μμ² λ©μμ§μ HTTP μλ΅ λ©μμ§λ€.
HTTP μμ² λ©μμ§
GET κ²μ / path μ£Όμ / HTTP λ²μ (μμλΆλΆ)
λ°λμλ μμ²ν κ² μμΌλ©΄ 곡백μΌλ‘ λ£κ³ μμ²νλ©΄ λλ€.
HTTP μλ΅ λ©μμ§
htmlμ λ°μ΄ν°κ° λ€μ΄μ¨λ€.
μμλΌμΈ
start-line = μμ² λΌμΈ request-line / μλ΅ λΌμΈ status-line
μμ λΌμΈμ μμ² λ©μμ§μ μνλΌμΈμ΄ μμ΅λλ€.
μμ²λΌμΈ(request-line)μλ λ©μλμ μμ² νκ², κ·Έλ¦¬κ³ HTTP λ²μ μ΄ λ€μ΄κ°μΌνλ€.
request-line = method SP(곡백) request-target SP(곡백) HTTP-version CRLF
βμμ² λ©μμ§- HTTP λ©μλ β μ§μ§ μ€μ
- μ’ λ₯ : GET(리μμ€ μ‘°ν), POST(μμ² λ΄μ μ²λ¦¬), PUT, DELETE(μμ λΆν)
- μλ²κ° μνν΄μΌ ν λμ μ§μ (GET: 리μμ€μ‘°ν / POST: μμ² λ΄μ μ²λ¦¬)
μμ² λ©μμ§ - μμ² λμ (/search?q=hello&hl=ko)
μ) GET //search?q=hello&hl=ko HTTP/1.1
HOST: www.google.com
μμ² λ©μμ§ - HTTP Version
μλ΅ λ©μμ§ status-line
status-line = HTTP-version SP(곡백) status-code SP(곡백) reason-phrase CRLF
βμλ΅ λ©μμ§ μνμ½λβ (μμ² μ€μ)
-
μμ² μ±κ³΅, μ€ν¨λ₯Ό λνλΈλ€
-
200 : μ±κ³΅
-
400 : ν΄λΌμ΄μΈνΈ μμ² μ€λ₯
-
500 : μλ² λ΄λΆ μ€λ₯
OK : μ¬λμ΄ μ΄ν΄ν μ μλ μ§§μ μν μ½λ μ€λͺ
κΈ
곡μ μ€ν : HTTP-message = start-line*(header-field CRLF)CRLF[message-body]
μ¬κΈ°μ CRLFλ enter νμλ€.
HTTP ν€λ
- header-field = field-name ":" OWS field-value OWS (OWS:λμ΄μ°κΈ° νμ©! λμ΄μ¨λ λκ³ μ λμ΄λ λλ€.)
- field-nameμ λμλ¬Έμ ꡬ문 μμ
ex)Host:www.google.com
HTTP ν€λμ μ©λ
-
HTTP μ μ‘μ νμν λͺ¨λ λΆκ° μ 보
(μ) λ©μμ§ λ°λμ λ΄μ©, λ©μμ§ λ°λμ ν¬κΈ°, μμΆ, μΈμ¦, μμ² ν΄λΌμ΄μΈνΈ(λΈλΌμ°μ ) μ 보, μλ² μ ν리μΌμ΄μ μ 보, μΊμ κ΄λ¦¬ μ 보... -
νμ€ ν€λκ° λ무 λ§λ€
-
νμμ μμμ ν€λ μΆκ° κ°λ₯
helloworld: hihi
HTTP λ©μμ§ λ°λ
- μ€μ μ μ‘ν λ°μ΄ν°
- HTML λ¬Έμ, μ΄λ―Έμ§, μμ, JSON λ±λ± byteλ‘ ννν μ μλ λͺ¨λ λ°μ΄ν° μ μ‘ κ°λ₯
π λ¨μν¨ νμ₯ κ°λ₯
- HTTPλ λ¨μνλ€. μ€νλ μ½μ΄λ³Όλ§ νλ€.
μμμ€
머리
λ°λ
μ΄λ κ² κ΅¬λΆλλ€.
-
HTTP λ©μμ§λ λ§€μ° λ¨μνλ€.
-
ν¬κ² μ±κ³΅νλ νμ€ κΈ°μ μ λ¨μνμ§λ§ νμ₯ κ°λ₯ν κΈ°μ




