π http?
HTTP?
HTTP(HyperText Transfer Protocol)λ μλ²μ ν΄λΌμ΄μΈνΈκ° μλ‘ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°κΈ° μν΄ μ¬μ©λλ ν΅μ κ·μ½μ΄λ€.
μ½κ²λ§ν΄ μΉμμ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°λ κ·μΉμ΄λ€.
HTML, TEXT, IMAGE, μμ±, μμ νμΌ, JSON, XMLλ± κ±°μ λͺ¨λ ννμ λ°μ΄ν°κ° μ μ‘κ°λ₯νλ€.
κ·Έλ λ€λ©΄ μ μ΄λ¦μ΄ βHyperTextβμΌκΉ?
μ²μ HTTPκ° λ§λ€μ΄μ‘μ λλ μΉ νμ΄μ§(HTML λ¬Έμ)λ₯Ό μ£Όκ³ λ°λ κ²μ΄ λͺ©μ μ΄μλ€.
κ·Έλμ βνμ΄νΌν
μ€νΈ μ μ‘ κ·μ½βμ΄λΌλ μ΄λ¦μ΄ λΆμλ€.
νμ§λ§ μ§κΈμ HTTPλ λ¨μν HTMLλ§ λ³΄λ΄λ κ²μ΄ μλλ€.
μΉ νμ΄μ§λ 보λ΄κ³ , μ΄λ―Έμ§λ 보λ΄κ³ , λ‘κ·ΈμΈ κ²°κ³Ό(JSON)λ 보λ΄λ λ± νλμ HTTPλ μΉ μμμ μ€κ°λ κ±°μ λͺ¨λ λ°μ΄ν°μ μ΄λ° κ·μΉμ΄λΌκ³ 보면 λλ€.
κ·ΈλΌ μ΄κΉμμ΄ λμ€λ μ§λ¬Έ..μ νμν κΉ??
μ°λ¦¬κ° λΈλΌμ°μ μ https://google.com μ
λ ₯νλ€ ν΄λ³΄μ
κ·Έ μκ° λΈλΌμ°μ λ μλ²μκ² βgoogle.com νμ΄μ§ μ’ μ£ΌμΈμβλΌκ³ μμ²νλ€.
κ·Έλ¦¬κ³ μλ²λ HTML λ¬Έμλ₯Ό 보λ΄μ€λ€.
μ΄λ μ¬μ©νλ μ½μμ΄ HTTPλ€.
HTTP λμ λ°©μ
κΈ°λ³Έμ μΌλ‘ μμ²(Request)κ³Ό μλ΅(Response)μ ꡬ쑰μ΄λ€.
μλ₯Όλ€μ΄ ν΄λΌμ΄μΈνΈκ° μμ²μ νκ³ μλ²μμ μλ΅μ΄ μ¬ λκΉμ§ κΈ°λ€λ¦°λ€.
κ·Έλ¦¬κ³ μλ²λ μμ²μ λν κ²°κ³Όλ₯Ό λ§λ€μ΄ μλ΅νλ€.
- μμ²
- λΈλΌμ°μ κ° μλ²μκ² λ³΄λΈλ€
- GET /users/1 HTTP/1.1
- GET β μ‘°ν
- /users/1 β μ΄ μ£Όμ μμ²
- HTTP/1.1 β HTTP λ²μ
- μλ΅
- HTTP/1.1 200 OK
- Content-Type: application/json
- { βidβ: 1, βnameβ: βSeungjeβ }
- 200 OK β μ±κ³΅
- JSON λ°μ΄ν° μ λ¬ (μμ΄λμ μ΄λ¦)
HTTPμ λ²μ (μμ¬)

HTTP/0.9
- GET λ©μλλ§ μ§μ
- HTTP ν€λ x
HTTP/1.0
- λ©μλ, ν€λ, μνμ½λ μΆκ°
- μνμ½λμ content-typeμ΄ μ겨 html νμΌ μΈμ λ€λ₯Έ νμ νμΌλ μ μ‘
- μμ²λ§λ€ 컀λ₯μ μ립(λ§€λ² μλ‘μ΄ μ°κ²°) -> λλ¦Ό
- 컀λ₯μ νλλΉ μμ² νλμ μλ΅ νλλ§ μ²λ¦¬ν¨
HTTP/1.1
- νμ¬ κ°μ₯ λ§μ΄ μ¬μ©
- νλ²μ μ¬λ¬ μμ² κ°λ₯
- νμ΄νλΌμ΄λ(Pipelining) μ§μ : νλμ 컀λ₯μ
μμ μλ΅μ κΈ°λ€λ¦¬μ§ μκ³ μμ°¨μ μΈ μ¬λ¬ μμ²μ μ°μμ μΌλ‘ λ³΄λ΄ κ·Έ μμμ λ§μΆ° μλ΅μ λ°λ λ°©μμΌλ‘ μ§μ° μκ°μ μ€μ΄λ λ°©μ -> HOL Blocking λ¬Έμ
- Head Of Line Blocking : μ°μ μμλ‘ λ€μ΄μ¨ μμ²μ μλ΅ μκ°μ΄ κΈΈμ΄μ§λ©΄ ν μμμ μλ μμ²μ μλ΅μκ°λ κΈΈμ΄μ§λ λ¨μ
HTTP/2.0
- HTTP/1.1 μ±λ₯ κ°μ λ° νμ₯
- λ°μ΄λ리 νλ μ΄λ° κ³μΈ΅ μ¬μ©μ λ©μΈμ§ μ μ‘ λ°©μ λ³ν
- 1.0μ text νμ μ λ¬μμ μμ², μλ΅ λ©μμ§λ νλ μ λ¨μλ‘ λλμ΄μ§λ κ²
- μ€λ₯ λ°μ κ°λ₯μ± μ ν
- νμ±, μ μ‘μλ μ¦κ°
- HOL Blocking λ¬Έμ ν΄κ²° -> λ©ν°νλ μ±(Multiplexed Streams)

- νλμ μ°κ²°μμ μ¬λ¬ μμ²κ³Ό μλ΅μ λμμ μ£Όκ³ λ°λ κΈ°μ
- Header μ€λ³΅ λ¬Έμ ν΄κ²° (HPACK μμΆ)
HTTP/3.0
- TCP λμ UDPλ₯Ό μ΄μ©ν QUIC νλ‘ν μ½ μ¬μ©
- μ§κΈκΉμ§λ TCP λ°©μμ μ¬μ©νμ§λ§(TCPμ λν΄μλ μΆν μμΈν μ€λͺ μμ ), 3.0λΆν°λ UDP QUIC(UDP μμ TCP κΈ°λ₯μ μννΈμ¨μ΄λ‘ ꡬνν νλ‘ν μ½) μ¬μ©
μ΄λ κ² λ³΄λ©΄ 3.0μ΄ μ μΌ μ’μκ±°λκΉ λ€ 3.0λ§ μ¬μ©νλ©΄ λλκ±° μλλ?λΌ μκ°ν μ μλ€.
λλ κ·Έλ κ² μκ°νλλ° μλλ€..μ½κ² μ€λͺ
ν΄μ£Όλ§
HTTP/1.1 = μλ κΈ°μ΄, μ€λλμ§λ§ μ΄λμλ κ°λ₯
HTTP/2 = μλ λ³μκΈ°, ν¨μ¨ μ’μμ§
HTTP/3 = μ΅μ μ κΈ°μ°¨, λΉ λ₯΄κ³ ν¨μ¨μ
μ κΈ°μ°¨κ° λμλ€κ³ μ§κΈ μ°λ¦¬κ° λͺ¨λ μ κΈ°μ°¨λ₯Ό νμ§ μλκ² μ²λΌ λκ°λ€ μ΄κ²λ.
HTTP νΉμ§
무μνμ± (Stateless)
μμ API κ΄λ ¨ κΈμμ μμΈν μ€λͺ
νμΌλ κ°λ¨νκ²λ§ μ€λͺ
νλ€.
μλ²κ° μ΄μ μμ²μ κΈ°μ΅νμ§ μλ κ²μ΄λ€. μλ²κ° μ΄μ μ λͺ¨λ μμ²μ κΈ°μ΅νκ² λλ©΄ λ©λͺ¨λ¦¬ λ§μ΄ μ¬μ©νκ³ μλ² λΆνλ μ¦κ°νλ λ± λ¨μ μ΄ λ§μμ? κ·Έλμ κ·Έλ₯ κΈ°μ΅ μνλ κ±°λ€.
λΉμ°κ²°μ± (Connectionless)
μμ²κ³Ό μλ΅μ΄ λλλ©΄ μ°κ²°μ λλ κ²μ΄λ€. μ¦ μλ²μ ν΄λΌμ΄μΈνΈκ° Connectionμ μ§μνμ§ μλ κ²μ΄λ€. μ°κ²°μ μ μ§νλ©΄ μμμ΄ κ³μν΄μ μ¬μ©λμ§λ§, μ μ§νμ§ μμΌλ©΄ μλ²μ μμμ λμ± ν¨μ¨μ μΌλ‘ μ¬μ©ν μ μκ² λκΈ° λλ¬Έμ΄λ€.
HTTP/1.0 μμ μλ λ§€ μμ²λ§λ€ μλ‘ μ°κ²°μ νμ¬ λλ Έμ§λ§, 1.1λΆν°λ Keep-Alive κΈ°λ₯μ΄λΌκ³ μ°κ²°μ μ μ μ μ§ν΄μ μ¬λ¬ μμ²μ λ³΄λΌ μ μλ κΈ°λ₯μ΄ μκ²Όλ€.
μ°κ²°μ λλ λ€λ©΄μ μ μ μ§νμ§? λΌλ μλ¬Έμ΄ μκΈΈ μ μλ€.
μ°¨κ·Όμ°¨κ·Ό μμ보μ.
μΉ νμ΄μ§ νλλ₯Ό μμ²νλ€κ³ μκ°ν΄λ³΄μ. νμ΄μ§μλ HTML, CSS, JS, μ΄λ―Έμ§ 10κ°
μ΄λ κ² μ¬λ¬ μμμ΄ μλ€. κ·Έλ°λ° HTTP/1.0μ μμ νλλ§λ€ μ°κ²° β μλ΅ β μ’
λ£λ₯Ό λ°λ³΅νλ€.
λ¬Έμ λ μ¬κΈ°μ μκΈ΄λ€. μ μ°κ²°μ λ§Ίμ λλ§λ€ TCP Handshakeκ° λ°μνλ€λ κ²μ΄λ€.
μ¬κΈ°μ μ°κ²°μ λ¨μν μ°κ²°μ΄ μλλ€. SYN -> SYN-ACK -> ACK μ΄λ° κ³Όμ μ κ±°μΉλλ° μμμ΄ 20κ°λ©΄? 20λ²μ νλκ±°λ€..μ΄κ² λλ΅ 1μ΄ μ λ μ§μ°μ΄ μκΈ°κΈ°λ νλ κ²μ΄λ€.
κ·Έλμ λ±μ₯ν κ²μ΄ λ°λ‘ Keep-Aliveλ€.
ν λ² TCP μ°κ²° λ§Ίκ³ HTML μμ², CSS μμ², JS μμ², μ΄λ―Έμ§ μμ², λ€ λλλ©΄ μ’
λ£
μ΄κ±Έ μ§μ μ°κ²°μ΄λΌκ³ νλ κ²μ΄λ€.
κ·ΈλΌ κ·Έλ₯ κ³μ μ°κ²°νλ©΄ λμμ? β‘ μκΉ λ§νλ―μ΄ μλ² μμ λ¬Έμ λΌ μ΄μ©μ μλ€ μ΄κ±΄
HTTP μν μ½λ
- 200 : OK
- 201 : Created
- 400 : Bad Request
- 401 : Unauthoized
- 404 : Not Found
- 500 : Internal Server Error
λ§μ΄ μ¬μ©νλ μνμ½λμλ μμ κ°μ μ’
λ₯κ° μλλ° μ’λ μ€λͺ
ν΄λ³΄μλ©΄ μλμ κ°λ€.
1xx(μ 보) :Β μμ²μ λ°μμΌλ©° νλ‘μΈμ€λ₯Ό κ³μ μ§ν
2xx(μ±κ³΅) :Β μμ²μ μ±κ³΅μ μΌλ‘ λ°μμΌλ©° μΈμνκ³ μμ©
3xx(리λ€μ΄λ μ
) :Β μμ² μλ£λ₯Ό μν΄ μΆκ° μμ
μ‘°μΉκ° νμ
4xx(ν΄λΌμ΄μΈνΈ μ€λ₯) :Β μμ²μ λ¬Έλ²μ΄ μλͺ»λμκ±°λ μμ²μ μ²λ¦¬ν μ μμ
5xx(μλ² μ€λ₯) :Β μλ²κ° λͺ
λ°±ν μ ν¨ν μμ²μ λν μΆ©μ‘±μ μ€ν¨
HTTP λ©μΈμ§
μμ μ€λͺ
νλ λμ λ°©μκ³Ό λΉμ·ν μ΄μΌκΈ°μ΄λ€.
HTTPλ μ°λ¦¬μ²λΌ λ§λ‘ λνλ₯Ό μ£Όκ³ λ°λκ² μλλΌ μ ν΄μ§ ꡬ쑰μ λ©μΈμ§λ₯Ό μ£Όκ³ λ°λλ€.
λ©μΈμ§μ μ’
λ₯λ 2μ’
λ₯κ° μ‘΄μ¬νλ€. μμ²(Request)λ©μΈμ§μ μλ΅(Response)λ©μΈμ§
μμ² λ©μμ§
λΈλΌμ°μ κ° μλ²μκ² λ³΄λ΄λ λ©μΈμ§λ€.
- μμμ€ (Start Line)
- GET /users/1 HTTP/1.1
- HTTP/1.1λ‘ 1λ² μ¬μ©μ μ 보 μμ²
- GET /users/1 HTTP/1.1
- ν€λ (Header)
- Host: example.com
- Content-Type: application/json
- μΆκ° μ 보μ λν λ΄μ©μ΄λ€
- Host β μ΄λ μλ²?
- Content-Type β λ°μ΄ν° νμ
- Authorization β μΈμ¦ μ 보
- Cookie β λ‘κ·ΈμΈ μ 보
- λ°λ (Body)
- { βnameβ: βSeungjeβ, βageβ: 28 }
- μλ²μ μ λ¬ν μ€μ λ΄μ©μ΄λ€
- μ 체 ꡬ쑰
GET /users/1 HTTP/1.1 Host: example.com Content-Type: application/json { "name": "Seungje", "age": 28 }
μλ΅ λ©μΈμ§
μλ²κ° λλ €μ£Όλ λ©μΈμ§λ€.
- μμμ€ (Start Line)
- HTTP/1.1 200 OK
- HTTP/1.1 β λ²μ
- 200 β μν μ½λ
- OK β μ€λͺ
- βμ μ μ²λ¦¬ μλ£βλΌλ μλ―Έ
- HTTP/1.1 200 OK
- ν€λ (Header)
- Content-Type: application/json
- μλ΅μ λν μΆκ° μ 보μ΄λ€.
- λ°λ (Body)
- μ€μ λ°μ΄ν° (JSON, HTML, IMAGE λ±μ΄ ν¬ν¨λμ΄μλ€)
μ½κ² μ€λͺ
νλ©΄ HTTP λ©μΈμ§λ νΈμ§ νμμ΄λΌ μκ°νλ©΄ λλ€.
μμμ€ β νΈμ§ μ λͺ©
ν€λ β 보λ΄λ μ¬λ, λ°λ μ¬λ μ 보
λ°λ β μ§μ§ λ΄μ©
HTTP λ©μλ
λ§μ΄ λ€μ΄λ΄€μ λ΄μ©μ΄λ€.
HTTP λ©μλμ μ’
λ₯λ 9κ°μ§κ° μλλ°, νλμ© λ³΄μλ©΄
1οΈβ£ GET : μ‘°ν
2οΈβ£ POST : μμ² (μ£Όλ‘ λ°μ΄ν° λ±λ‘μ μ¬μ©)
3οΈβ£ PUT : 리μμ€λ₯Ό λ체, ν΄λΉ 리μμ€κ° μμΌλ©΄ μμ± (리μμ€ μ 체 μμ )
4οΈβ£ PATCH : 리μμ€ μΌλΆ μμ
5οΈβ£ DELETE : 리μμ€ μμ
6οΈβ£ HEAD : GETκ³Ό λμΌνμ§λ§ λ©μμ§ λΆλΆμ μ μΈνκ³ , μν μ€κ³Ό ν€λλ§ λ°ν
7οΈβ£ OPTIONS : λμ 리μμ€μ λν ν΅μ κ°λ₯ μ΅μ
μ μ€λͺ
(μ£Όλ‘ CORSμμ μ¬μ©)
8οΈβ£ CONNECT : λμ μμμΌλ‘ μλ³λλ μλ²μ λν ν°λμ μ€μ
9οΈβ£TRACE : λμ 리μμ€μ λν κ²½λ‘λ₯Ό λ°λΌ λ©μμ§ λ£¨νλ°± ν
μ€νΈλ₯Ό μν
μ£Όλ‘ μ¬μ©νλ λ©μλλ 1λ² ~ 5λ²μ΄λ€. λλ¨Έμ§ λ΄μ©μ μ²μ λ΄€μλ λΉν©νλ©΄ μμ΄λ³΄μ΄λ νλ² μ© λ³΄λ μ λλ‘ λ§μ‘±ν΄λ³΄μ
μ°Έκ³ μλ£
https://okky.kr/questions/1164521
https://inpa.tistory.com/entry/HTTP-%F0%9F%8C%90-%EB%B0%B1%EC%97%94%EB%93%9C-%EB%A1%9C%EB%93%9C%EB%A7%B5-HTTP%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C%EC%9A%94#http_%EB%A9%94%EC%84%B8%EC%A7%80
https://velog.io/@sweet_sumin/HTTP-%EB%B2%84%EC%A0%84%EB%B3%84-%EC%B0%A8%EC%9D%B4-1.0-1.1-2.0-3
https://bruders.tistory.com/143