λ¬Έμ κ°μ λ§ν¬λ₯Ό ν΅ν΄ μ°κ²°ν μ μλ νλ‘ν μ½
νμ§λ§, μ΄μ λ λ¬ΈμλΏ μλλΌ HTTP λ©μμ§μ λͺ¨λ κ²μ μ μ‘νλ€.
- HTML, TEXT
- IMAGE, μμ±, μμ, νμΌ
- JSON, XML(API)
- κ±°μ λͺ¨λ ννμ λ°μ΄ν°κ° μ μ‘ κ°λ₯νλ€.
- μλ² κ°μ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°μ λλ λλΆλΆ HTTPλ₯Ό μ¬μ©νλ€.
-
HTTP/0.9 1991λ : GET λ©μλλ§ μ§μ, HTTP ν€λ X
-
HTTP/1.0 1996λ : λ©μλ, ν€λ μΆκ°
-
HTTP/1.1
1997λ : κ°μ₯ λ§μ΄ μ¬μ©νλ©°, μ°λ¦¬μκ² κ°μ₯ μ€μν λ²μ - RFC2068 (1997) π RFC2616 (1999)(κ°μ ) π RFC7230~7235 (2014)(κ°μ )
- _1.1μ λλΆλΆμ κΈ°λ₯μ΄ λ€μ΄κ°κ³ , 2μ 3μμλ μ±λ₯ κ°μ μ μ΄μ μ΄ λ§μΆ°μ Έ μλ€. _
-
HTTP/2 2015λ : μ±λ₯ κ°μ
-
HTTP/3 μ§ν μ€ : TCP λμ μ UDP μ¬μ©, μ±λ₯ κ°μ
- TCP :
HTTP/1.1
,HTTP/2
λ TCP κΈ°λ°μΌλ‘ λμνλ€. - UDP :
HTTP/3
- νμ¬
HTTP/1.1
μ μ£Όλ‘ μ¬μ©νλ€.HTTP/2
,HTTP/3
λ μ μ°¨ μ¦κ°νκ³ μλ€.
κΈ°μ‘΄ TCPλ 3 way hanshake
λΆν° λ΄λΆμ μΌλ‘ ν¬ν¨νκ±°λ μΆκ°ν΄μΌ νλ μμ
λ€μ΄ λ무 λ§μμ
μ λ’°μ±μ΄λ μ°κ²°μ±μ 보μ₯λμ§λ§ μλκ° λ¨μ΄μ§λ€.
κ·Έλ κΈ°μ UDP νλ‘ν μ½μ μ ν리μΌμ΄μ
λ 벨μμ μ¬μ€κ³λ₯Ό ν΄μ λμ¨ κ² HTTP/3
μ΄λ€.
- ν΄λΌμ΄μΈνΈ μλ² κ΅¬μ‘°λ‘ λμνλ€.
- 무μν νλ‘ν μ½(stateless), λΉμ°κ²°μ±
- HTTP λ©μμ§λ₯Ό ν΅ν΄μ ν΅μ μ νλ€(μ‘/μμ λͺ¨λ)
- λ¨μν¨, νμ₯ κ°λ₯
HTTPλ ν΄λΌμ΄μΈνΈμ μλ² κ΅¬μ‘°λ‘ λμ΄μλλ°, HTTPλ ν΄λΌμ΄μΈνΈκ° HTTP λ©μμ§λ₯Ό λ§λ€μ΄ 보λ΄κ³ , μλ²μμ μμ²μ λν μλ΅μ΄ μ¬ λκΉμ§ κΈ°λ€λ¦°λ€.(Request) κ·Έλ¦¬κ³ μλ²λ μμ²μ λν κ²°κ³Όλ₯Ό λ§λ€μ΄μ μλ΅(Response) νλ ꡬ쑰μΈλ°, μ΄μ§Έμ μ΄λ κ² ν΄λΌμ΄μΈνΈμ μλ²λ₯Ό λΆλ¦¬ν΄μΌλ§ ν κΉ?
-
ν΄λΌμ΄μΈνΈμμλ 볡μ‘ν λΉμ¦λμ€ λ‘μ§μ΄λ λ°μ΄ν°λ₯Ό λ€λ£° νμ μκ³ , UIλ₯Ό 그리λλ° μ§μ€ν μ μλ€.
-
μλ²μμλ 볡μ‘ν λΉμ¦λμ€ λ‘μ§μ΄λ, λ°μ΄ν°λ₯Ό λ€λ£¨λ λ°λ§ μ§μ€νλ©΄ λλ€.
π λ§μ½ νΈλν½μ΄ νμ£Όν΄ κ³ λνκ° νμν κ²½μ° ν΄λΌμ΄μΈνΈλ μ κ²½ μ°μ§ μκ³ μλ²λ§ κ°μ νλ©΄ λλ€.
ν΄λΌμ΄μΈνΈμ μλ²λ₯Ό λ 립μ μΌλ‘ ꡬλΆνλ€λ κ²μ κ°μμ μ± μμ λλ ν΄λΉ μ± μμλ§ μ§μ€νμ¬, μ΄μκ° μκΈ°κ±°λ ν λ ν μͺ½μλ§ μ κ²½ μ°λ©΄ λλ€λ μ₯μ μ κ°μ§λ€.
μλ²κ° ν΄λΌμ΄μΈνΈμ μνλ₯Ό 보쑴νλ€.
μ¦, ν΄λΌμ΄μΈνΈμ μλ² κ°μ μ‘/μμ μ νλ©° λ¨κ³λ³ κ³Όμ μ μ§ννλλ° μλ²μμ ν΄λΌμ΄μΈνΈκ° μ΄μ λ¨κ³μμ μ 곡ν κ°μ μ μ₯νκ³ λ€μ λ¨κ³μμλ μ μ₯ν μνμΈ κ².
μλ²κ° λ©μΆκ±°λ νλ μ¬λ¬ μ΄μ λ‘ λ€λ₯Έ μλ²λ₯Ό μ¬μ©ν΄μΌ νλ€λ©΄ μ΄μ μλ²μμ κ°μ§κ³ μλ μν κ°λ€μ κ°μ§κ³ μμ§ μκΈ° λλ¬Έμ μλ¬κ° λ°μνλ€.
ν΄λΌμ΄μΈνΈ: λ³μ Aμλ 10λ§ μμ λ£μ΄μ€.
μλ²: λ³μ Aμ 10λ§ μμ λ£κ² μ΅λλ€.
ν΄λΌμ΄μΈνΈ: λ³μ Bμλ 20λ§ μμ λ£μ΄μ€.
μλ²: λ³μ Bμ 20λ§ μμ λ£κ² μ΅λλ€.
ν΄λΌμ΄μΈνΈ: λ³μ Aμ Bμ ν©μ λμΌ?
μλ²: λ³μμ ν©μ 30λ§ μμ
λλ€.
ν΄λΌμ΄μΈνΈ: λ³μ Aμλ 10λ§ μμ λ£μ΄μ€.
μλ² A: λ³μ Aμ 10λ§ μμ λ£κ² μ΅λλ€.
--μλ² A λ€μ΄μΌλ‘ μλ² Bλ‘ κ΅μ²΄--
ν΄λΌμ΄μΈνΈ: λ³μ Bμλ 20λ§ μμ λ£μ΄μ€.
μλ² B: λ³μ Bμ 20λ§ μμ λ£κ² μ΅λλ€.
ν΄λΌμ΄μΈνΈ: λ³μ Aμ Bμ ν©μ λμΌ?
μλ² B: λ³μμ ν©μ κ³μ°ν μ μμ΅λλ€.
μλ‘μ΄ μλ²λ‘ λ³κ²½λλ©΄μ κΈ°μ‘΄ μλ²μ μ μ₯ν λ³μκ°μ μλ‘μ΄ μλ²μμλ μ μ μκΈ°μ μλ¬κ° λ°μνλ€. (λ§μ½, κΈ°μ‘΄ μλ²μμ μλ‘μ΄ μλ²λ‘ μ΄μ λ°μ΄ν°λ₯Ό λͺ¨λ μ λ¬ν΄ μ€λ€λ©΄ λ¬Έμ κ° μμ μ μλ€.) μ¦, νμ κ°μ μλ²κ° μ μ§λμ΄μΌ νλ€.
μλ²κ° ν΄λΌμ΄μΈνΈμ μνλ₯Ό 보쑴νμ§ μλλ€. κ·Έλ κΈ°μ λ§€λ² μμ²μ λͺ¨λ μν κ°λ€μ μ λ¬ν΄ μ€μΌ νλ€.
ν΄λΌμ΄μΈνΈ: λ³μ Aμ 10λ§ μμ λ£μ΄μ€
μλ² A: λ³μ Aμ 10λ§ μμ λ£κ² μ΅λλ€.
--μλ² A λ€μ΄μΌλ‘ μλ² Bλ‘ κ΅μ²΄--
ν΄λΌμ΄μΈνΈ: λ³μ Bμλ 20λ§ μμ λ£μ΄μ€.
μλ² B: λ³μ Bμ 20λ§ μμ λ£κ² μ΅λλ€.
ν΄λΌμ΄μΈνΈ: λ³μ Aμ 10λ§ μμ λ£κ³ λ³μ Bμλ 20λ§ μμ λ£κ³ κ³±μ κ³μ°ν΄ μ€
μλ² C: λ³μμ ν©μ 200λ§ μμ
λλ€.
- μλ²μ λ³κ²½μ΄ μ©μ΄νλ€λ κ²μ κ°μ κΈ°λ₯μ νλ μλ² μ΄λ κ²μ μ νν΄λ λλ€λ κ².
- κ·Έλ κΈ°μ μλ²μ μν νμ₯μ΄ λͺΉμ μ 리νλ€.
-
μν μ μ§
: μ€κ°μ μλ²κ° λ³κ²½λλ©΄ μ λλ€. -
무μν
: μ€κ°μ μλ²κ° λ³κ²½λΌλ λλ€.- ν΄λΌμ΄μΈνΈκ° νμ¦ν΄λ μλ²λ₯Ό λ릴 μ μλ€.
-
무μνλ μλ΅ μλ²λ₯Ό λ³κ²½νκΈ°κ° μ½κΈ°μ μλ² μ¦μ€μ΄ μ½λ€.
-
λͺ¨λ κ²μ 무μνλ‘ μ€κ³κ° κ°λ₯ν κ²½μ°λ μκ³ μλ κ²½μ°λ μλ€.
-
무μν
- λ‘κ·ΈμΈμ΄ νμ μλ λ¨μν μ΄λ²€νΈ νμ΄μ§
-
μν μ μ§
- λ‘κ·ΈμΈμ ν΄μΌ νλ κ²½μ°
-
λ‘κ·ΈμΈν μ¬μ©μμ κ²½μ° ν΄λΉ μνλ₯Ό μλ²μ μ μ§ν΄μΌ νλ€.
-
μΌλ°μ μΌλ‘ λΈλΌμ°μ μΏ ν€μ μλ² μΈμ λ±μ μ¬μ©ν΄ μνλ₯Ό μ μ§νλ€.
-
μν μ μ§λ μ΅μνμΌλ‘λ§ μ¬μ©νλ€.
-
보λ΄μΌ νλ λ°μ΄ν°κ° λ무 λ§λ€.
- λ§€λ² μμ²μ νμν λ°μ΄ν°λ₯Ό μ λΆ μμ±ν΄μΌ νκΈ° λλ¬Έ.
- TCP/IPλ μ°κ²°μ μ μ§νλ λͺ¨λΈμ΄λ€.
ν΄λΌμ΄μΈνΈ 1
μ΄ μλ²μ μ°κ²°μ ν λ€ν΄λΌμ΄μΈνΈ 2
μμ μλ²μ μ°κ²°μ ν λλν΄λΌμ΄μΈνΈ 1
κ³Ό μλ²λ μ°κ²°μ μ μ§νκ³ μλ€. (μ΄λν΄λΌμ΄μΈνΈ 3
μ κ²½μ°λ λ§μ°¬κ°μ§λ€.)
- ν΄λΌμ΄μΈνΈλ³λ‘ μλ²μ μ°κ²°μ μ μ§νμ§ μμ κ²½μ° νμν λλ§ μ°κ²°μ νλ©° κ·Έ μΈμλ μ°κ²°μ μ μ§νμ§ μκΈ° λλ¬Έμ μλ²μμ μ¬μ©ν΄μΌ νλ μμμ΄ ν¨μ¬ μ€μ΄λ λ€.
- HTTPλ κΈ°λ³Έμ΄ μ°κ²°μ μ μ§νμ§ μλ λͺ¨λΈμ΄λ€.
- μΌλ°μ μΌλ‘ μ΄ λ¨μ μ΄νμ λΉ λ₯Έ μλλ‘ μλ΅νλ€.
- 1μκ° λμ μμ² λͺ
μ΄μμ΄ μλΉμ€λ₯Ό μ¬μ©ν΄λ μ€μ μλ²μμ λμμ μ²λ¦¬νλ μμ²μ μμ κ° μ΄νλ‘ μ λ€.
EX) μΉ λΈλΌμ°μ κ²μ νμ΄μ§μμ κ²μ λ²νΌλ§ μ°ννλ©΄μ μ΄μ©νμ§λ μλλ€.
- μλ² μμμ λ§€μ° ν¨μ¨μ μΌλ‘ μ¬μ©ν μ μλ€.
λΉμ°κ²°μ±μ΄ μ’κΈ°λ§ ν κ²μμλλ€. λ§€λ² μλ‘ μ°κ²°ν΄μΌ νλ€λ κ²μ 맀 μ°κ²°λ§λ€ λ€μ΄κ°λ λΉμ©μ λν΄μ κ³ λ €νμ§ μμ μ μλ€.
- TCP/IP μ°κ²°μ μλ‘ λ§Ίμ΄μΌ νλ€. - 3 way handshake μκ° μΆκ°
- μΉ λΈλΌμ°μ λ‘ μ¬μ΄νΈλ₯Ό μμ²νλ©΄ HTMLλΏ μλλΌ JavaScript, CSS, Image λ± μλ§μ μμλ€μ ν¨κ» λ€μ΄λ‘λνλ€.
- μ§κΈμ HTTP μ§μ μ°κ²°(Persistent Connections)λ‘ λ¬Έμ λ₯Ό ν΄κ²°νλ€.
- HTTP/2, HTTP/3μμ λ λ§μ μ΅μ ν.
HTTP μ΄κΈ°μλ λͺ¨λ μλ£μ λν΄μ λΉμ°κ²°μ±μΌλ‘ κ°κ°μ μμμ λν΄ μ°κ²°
/μλ΅
/μ’
λ£
λ₯Ό λ°λ³΅νλ€ λ³΄λ λλ΅μ μΌλ‘ 1μ΄κ°λ μλͺ¨λμλ€κ³ νλ€. κ·ΈλΌ μ΄ κ²½μ° HTTP μ§μ μ°κ²°μ νλ©΄ μ΄λ»κ² λ κΉ?
ν΄λΌμ΄μΈνΈλ μλ²μ μ°κ²°μ ν λ€μ νμν μμμ μμ²/μλ΅μΌλ‘ λ€μ΄λ‘λνλ€.
HTTP μ΄κΈ°μ μ°¨μ΄μ
μΌλ‘ μ°κ²°μ΄ μ’
λ£λλ κ²μ΄ μλλΌ νμν μμλ€μ λͺ¨λ λ€μ΄λ‘λν λκΉμ§ μ°κ²°μ΄ μ’
λ£λμ§ μκ³ μμ²
/μλ΅
μ΄ λ°λ³΅λ λ€ μ’
λ£λλ€. κ·ΈλΌμΌλ‘μ¨ μλ μμ²΄κ° λ λΉ¨λΌμ‘λ€.
μ€λ¬΄ μν©μμ νΉμ μκ°μ λ°μνλ λμ©λ νΈλν½μ λν΄μ λμν΄μΌ νλ κ²½μ°κ° μκΈ΄λ€ (Ex: μ μ°©μ μ΄λ²€νΈ, λͺ μ KTX μμ½) μ΄λ΄ κ²½μ° μμ², μλ§ λͺ μ΄μμ΄ λμμ μ μμ νλ©΄μ μλ²μ κ³ΌλΆνκ° κ±Έλ¦¬λ κ²½μ°κ° μλλ°, μ΄ κ²½μ° λ¬΄μν νμ΄μ§λ₯Ό νμ©ν΄ νμ΄μ§ μ μ μΈμμ λΆμ°ν΄μ λμ©λ νΈλν½μ λΆμ°μν€λ©΄ μ’λ€.
- 곡백 λΌμΈμ νμ μ 보
- header-field = field-name":" OWS field-value OWS
- OWS WW: λμ΄μ°κΈ° νμ©
- field-nameμ λμλ¬Έμ ꡬλΆμ΄ μλ€.
HTTP μ μ‘μ νμν λͺ¨λ λΆκ°μ 보
- λ©μμ§ λ°λμ λ΄μ©, λ©μμ§ λ°λμ ν¬κΈ°, μμΆ, μΈμ¦, μμ² ν΄λΌμ΄μΈνΈ(λΈλΌμ°μ ) μ 보 λ±.
- νμ€ ν€λκ° λ무 λ§λ€.
- νμν κ²½μ° μμμ ν€λ μΆκ° κ°λ₯
- helloworld: hihi
- μ€μ μ μ‘ν λ°μ΄ν°
- HTML λ¬Έμ, μ΄λ―Έμ§, μμ, JSON λ± byteλ‘ ννν μ μλ λͺ¨λ λ°μ΄ν° μ μ‘μ΄ κ°λ₯νλ€.
- μμ² λ©μμ§μ μμ λΌμΈμ μ μ‘ νμ κ³Ό ν¨μ€, 쿼리 μ€νΈλ§, HTTP λ²μ κ°μ μ 보λ₯Ό λ΄λλ€.
- ν€λμλ κΈ°ν μ 보λ₯Ό λ΄λλ€.
- μ μ‘ν λ°μ΄ν°κ° μμΌλ©΄ 곡백 μ΄ν 무μΈκ° μΆκ°ν νμλ μλ€.
-
start-line = request-line / status-line
-
request-line = method SP request-target SP HTTP-version CRLF
- SP : 곡백(Space)
- CRLF : μν°(κ°ν)
-
HTTP λ©μλ(GET : μ‘°ν)
- μ’
λ₯ :
GET
,POST
,PUT
,DELETE
- μλ²κ° μνν΄μΌ ν λμμ μ§μ νλ€.
GET
: 리μμ€ μ‘°νPOST
: μμ² λ΄μ μ²λ¦¬
- μ’
λ₯ :
-
μμ² λμ(/search?q=hello&hl=ko)
- absolute-path[?query](μ λ κ²½λ‘[?쿼리])
- μ λ κ²½λ‘ = "/"λ‘ μμνλ κ²½λ‘
- *, http://..._?x=y_μ κ°μ΄ λ€λ₯Έ μ νμ κ²½λ‘ μ§μ λ°©μλ μλ€.
-
HTTP Version
- μμ λΌμΈμλ HTTP λ²μ κ³Ό Status Code λ±μ λ΄λλ€
- ν€λμλ κΈ°ν μ 보λ₯Ό λ΄λλ€.
- Bodyμ μμ²ν μμμ λ΄λλ€. (ex: HTML)
- 곡μ μ€ν
HTTP-message = start-line
*(header-field CRLF)
*CRLF
[ message - body ]
- start-line = request-line / status-line
- status-line = HTTP-version SP status-code SP reason-phrase CRLF
- HTTP λ²μ
- HTTP μν μ½λ: μμ² μ±κ³΅, μ€ν¨λ₯Ό λνλΈλ€.
200
: μ±κ³΅400
: ν΄λΌμ΄μΈνΈ μμ² μ€λ₯500
: μλ² λ΄λΆ μ€λ₯
- μ΄μ 문ꡬ : μ¬λμ΄ μ΄ν΄ν μ μλ 짧μ μν μ½λ μ€λͺ κΈ
- HTTPλ λͺΉμ λ¨μνκ³ μ€νλ λ³Όλ§νλ€.
- HTTP λ©μμ§λ λ§€μ° λ¨μνλ€.
- μ 리νλ©΄ λ¨μνκΈ°μ νμ₯μ΄ μ½κ³ μ μ°ν κΈ°μ μ΄λ€.