π[Network] HTTP νλ‘ν μ½μ΄λ 무μμΌκΉμ?
- HTTP(νμ΄νΌν μ€νΈ μ μ‘ νλ‘ν μ½, HyperText Transfer Protocol)λ μΉμμ ν΄λΌμ΄μΈνΈμ μλ² κ°μ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°κΈ° μν κ·μ½μ λλ€.
- μΈν°λ·μμ μΉ νμ΄μ§, μ΄λ―Έμ§, λμμ λ± λ€μν 리μμ€λ₯Ό μ μ‘νλ νμ€ ν΅μ νλ‘ν μ½λ‘, μΉ λΈλΌμ°μ μ μΉ μλ² κ°μ ν΅μ μ μ¬μ©λ©λλ€.
πββοΈ νλ‘ν μ½(Protocol)μ΄λ 무μμΌκΉμ?
1οΈβ£ HTTPμ κΈ°λ³Έ κ°λ .
1οΈβ£ ν΄λΌμ΄μΈνΈ-μλ² λͺ¨λΈ.
- HTTPλ ν΄λΌμ΄μΈνΈμ μλ² κ°μ μμ²-μλ΅ λ°©μμΌλ‘ λμν©λλ€.
- μΉ λΈλΌμ°μ κ°μ ν΄λΌμ΄μΈνΈκ° μλ²μ μμ²μ 보λ΄λ©΄, μλ²λ μμ²μ μ²λ¦¬νκ³ κ·Έ κ²°κ³Όλ₯Ό μλ΅μΌλ‘ λλ €μ€λλ€.
- ν΄λΌμ΄μΈνΈ : μΉ λΈλΌμ°μ , λͺ¨λ°μΌ μ± λ± μ¬μ©μ μΈ‘μμ μμ²μ 보λ΄λ μͺ½μ λλ€.
- μλ² : ν΄λΌμ΄μΈνΈμ μμ²μ μ²λ¦¬νκ³ μλ΅μ 보λ΄λ μͺ½μΌλ‘, μΉ μλ²λ λ°μ΄ν°λ² μ΄μ€ μλ²κ° λνμ μ λλ€.
2οΈβ£ 무μνμ±(Stateless).
- HTTPλ 무μνμ± νλ‘ν μ½μ
λλ€.
- μ¦, κ° μμ²μ λ
립μ μ΄λ©°, μ΄μ μμ²μ΄λ μλ΅μ μμ‘΄νμ§ μμ΅λλ€.
- μλ²λ μμ²μ μ²λ¦¬ν λ ν΄λΌμ΄μΈνΈμ μνλ₯Ό κΈ°μ΅νμ§ μμΌλ©°, λͺ¨λ μμ²μ μλ‘μ΄ κ²μ²λΌ μ²λ¦¬λ©λλ€.
- μ¦, κ° μμ²μ λ
립μ μ΄λ©°, μ΄μ μμ²μ΄λ μλ΅μ μμ‘΄νμ§ μμ΅λλ€.
- μ΄λ₯Ό 보μνκΈ° μν΄, μΏ ν€λ μΈμ μ ν΅ν΄ ν΄λΌμ΄μΈνΈ μνλ₯Ό μ μ§νλ λ°©λ²μ΄ μ¬μ©λκΈ°λ ν©λλ€.
3οΈβ£ URI(Uniform Resource Identifier)
- HTTPλ URI(ν΅ν© μ§μ μλ³μ)λ₯Ό μ¬μ©νμ¬ μΉμμ νΉμ 리μμ€λ₯Ό μλ³ν©λλ€.
- μΌλ°μ μΌλ‘λ URIλ μΉ μ£Όμ(λλ URL)λ‘ ννλλ©°, μλ²μμ μνλ 리μμ€λ₯Ό κ°λ¦¬ν΅λλ€.
- μ:
https://www.example.com/index.html
-
https://
: HTTP νλ‘ν μ½(HTTPS) -
www.example.com
: μλ² λλ©μΈ μ΄λ¦ -
/index.html
: μλ² λ΄μμ μμ²ν 리μμ€μ κ²½λ‘
-
4οΈβ£ HTTP λ©μλ(HTTP Methods)
- HTTPλ 리μμ€μ λν μμ²μ μλλ₯Ό λͺ
νν νκΈ° μν΄ μ¬λ¬ λ©μλλ₯Ό μ¬μ©ν©λλ€.
- λ©μλλ ν΄λΌμ΄μΈνΈκ° μλ²μ μ΄λ€ μμ μ μμ²νλμ§λ₯Ό μ μν©λλ€.
- μ£Όμ HTTP λ©μλ
- GET : 리μμ€λ₯Ό μ‘°ννλ λ° μ¬μ©ν©λλ€.(λ°μ΄ν°λ₯Ό μλ²μμ κ°μ Έμ΄)
- POST : μλ²μ μλ‘μ΄ λ¦¬μμ€λ₯Ό μμ±νκ±°λ λ°μ΄ν°λ₯Ό μ μ‘νλ λ° μ¬μ©ν©λλ€.
- PUT : μλ²μ κΈ°μ‘΄ 리μμ€λ₯Ό μμ νλ λ° μ¬μ©ν©λλ€.
- DELETE : μλ²μμ 리μμ€λ₯Ό μμ νλ λ° μ¬μ©ν©λλ€.
- HEAD : GET μμ²κ³Ό μ μ¬νμ§λ§, μλ΅ λ³Έλ¬Έ μμ΄ ν€λλ§μ λ°νν©λλ€.
5οΈβ£ HTTP μν μ½λ(HTTP Status Codes)
- μλ²λ ν΄λΌμ΄μΈνΈμ μμ²μ λν΄ μν μ½λλ₯Ό ν΅ν΄ μλ΅μ κ²°κ³Όλ₯Ό μ λ¬ν©λλ€.
- μν μ½λλ μμ²μ΄ μ±κ³΅νλμ§, μ€ν¨νλμ§, λλ μ΄λ€ λ¬Έμ κ° λ°μνλμ§μ λν μ 보λ₯Ό μ 곡νμ¬, 3μ리 μ«μλ‘ κ΅¬μ±λ©λλ€.
- μ£Όμ μν μ½λ
- 200 OK : μμ²μ΄ μ±κ³΅μ μΌλ‘ μ²λ¦¬λ¨.
- 201 Created : 리μμ€κ° μ±κ³΅μ μΌλ‘ μμ±λ¨.
- 400 Bad Request : ν΄λΌμ΄μΈνΈμ μμ²μ΄ μλͺ»λ¨.
- 401 Unauthorized : μΈμ¦μ΄ νμν¨.
- 403 Forbidden : κΆνμ΄ μμ΄μ μμ²μ΄ κ±°λΆλ¨.
- 404 Not Found : μμ²ν 리μμ€λ₯Ό μ°Ύμ μ μμ.
- 500 Internal Server Error : μλ² λ΄λΆ μ€λ₯κ° λ°μν¨.
6οΈβ£ ν€λ(Headers)
- HTTP μμ²κ³Ό μλ΅μλ ν€λκ° ν¬ν¨λ©λλ€.
- ν€λλ μμ²μ΄λ μλ΅μ λν λΆκ° μ 보λ₯Ό λ΄κ³ μμΌλ©°, ν΄λΌμ΄μΈνΈμ μλ² κ°μ ν΅μ λ°©μμ μ μ΄ν©λλ€.
- μ£Όμ ν€λ μ
-
Content-Type : μμ² λλ μλ΅ λ³Έλ¬Έμ λ°μ΄ν° νμμ μ§μ ν©λλ€.
- μ:
application/json
,text/html
- μ:
- User-Agent : ν΄λΌμ΄μΈνΈ μ ν리μΌμ΄μ (μ: λΈλΌμ°μ )μ μ 보λ₯Ό μλ²μ μ λ¬ν©λλ€.
- Authorization : μΈμ¦μ νμν μ 보(ν ν° λ±)λ₯Ό ν¬ν¨νμ¬ μλ²μ μ λ¬ν©λλ€.
-
Content-Type : μμ² λλ μλ΅ λ³Έλ¬Έμ λ°μ΄ν° νμμ μ§μ ν©λλ€.
7οΈβ£ HTTP λ²μ .
- HTTPλ μ¬λ¬ λ²μ μ΄ μ‘΄μ¬νλ©°, κ° λ²μ μ μ±λ₯ λ° κΈ°λ₯μ κ°μ ν΄μμ΅λλ€.
- HTTP/1.0 : κΈ°λ³Έμ μΈ κΈ°λ₯λ§ μ 곡νλ©°, ν λ²μ νλμ μμ²λ§ μ²λ¦¬ν μ μμ΅λλ€.
-
HTTP/1.1 : μ°κ²° μ¬μ¬μ©(Persistent Connection)μ μ§μνμ¬ μ¬λ¬ μμ²μ λμμ μ²λ¦¬ν μ μμ΅λλ€.
- μ¬μ ν μΉμμ κ°μ₯ λ§μ΄ μ¬μ©λλ λ²μ μ λλ€.
-
HTTP/2 : μ±λ₯ ν₯μμ μν΄ μμ²κ³Ό μλ΅μ λ€μ€ννμ¬, λμμ μ¬λ¬ μμ²μ 보λ΄κ³ λ°μ μ μκ² μ€κ³λμμ΅λλ€.
- μΉ νμ΄μ§ λ‘λ© μλλ₯Ό ν¬κ² κ°μ ν©λλ€.
- HTTP/3 : μ΅μ λ²μ μΌλ‘, QUIC νλ‘ν μ½μ κΈ°λ°μΌλ‘ νμ¬ μ±λ₯κ³Ό 보μμ±μ ν¬κ² κ°μ νμ΅λλ€.
π QUIC(Quick UDP Internet Connections) νλ‘ν μ½.
QUIC(Quick UDP Internet Connections)λ ꡬκΈμ΄ κ°λ°ν μΈν°λ· μ μ‘ κ³μΈ΅ νλ‘ν μ½λ‘, TCPμ κ°μ μ λ’°μ±μλ λ°μ΄ν° μ μ‘μ μ 곡νλ©΄μλ UDP(User Datagram Protocol)λ₯Ό κΈ°λ°μΌλ‘ νμ¬ λ λΉ λ₯Έ μ°κ²° μ립과 λ λμ μ±λ₯μ λͺ©νλ‘ ν©λλ€.
HTTP/3λ QUIC μμμ λμνλ©°, μΉμμμ μ μ§μ°κ³Ό μμ μ±μ κ°μ νλ λ° μ€μν μν μ ν©λλ€.
2οΈβ£ HTTP ν΅μ κ³Όμ .
- HTTP ν΅μ κ³Όμ μ ν΄λΌμ΄μΈνΈκ° μλ²μ μμ²(Request)μ 보λ΄κ³ , μλ²κ° μλ΅(Response)μ λ°ννλ μμ²-μλ΅ λͺ¨λΈλ‘ ꡬμ±λ©λλ€.
1οΈβ£ ν΄λΌμ΄μΈνΈ μμ².
- ν΄λΌμ΄μΈνΈκ° μλ²μ 리μμ€λ₯Ό μμ²νλ©΄, HTTP μμ²μ μλ²λ‘ μ μ‘ν©λλ€.
- μμ²μ λ€μκ³Ό κ°μ κ΅¬μ± μμλ₯Ό ν¬ν¨ν©λλ€.
- μμ² λ©μλ(μ: GET, POST)
- URI(μ:
/index.html
) - ν€λ(μ:
Content-Type
,User-Agent
) - λ³Έλ¬Έ(POST μμ²μΌ κ²½μ° λ°μ΄ν°κ° ν¬ν¨λ μ μμ)
- μμ²μ λ€μκ³Ό κ°μ κ΅¬μ± μμλ₯Ό ν¬ν¨ν©λλ€.
π μμ: GET
μμ².
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
2οΈβ£ μλ² μλ΅.
- μλ²λ ν΄λΌμ΄μΈνΈ μμ²μ μ²λ¦¬ν ν, HTTP μλ΅μ ν΄λΌμ΄μΈνΈμ λ°νν©λλ€.
- μλ΅μ λ€μκ³Ό κ°μ κ΅¬μ± μμλ₯Ό ν¬ν¨ν©λλ€.
- μν μ½λ (μ: 200 OK, 404 Not Found)
- ν€λ (μ:
Content-Type
,Cache-Control
) - λ³Έλ¬Έ (μ: HTML, JSON λ°μ΄ν°)
- μλ΅μ λ€μκ³Ό κ°μ κ΅¬μ± μμλ₯Ό ν¬ν¨ν©λλ€.
π μμ: 200 OK
μλ΅.
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1354
<html>
<head><title>Example</title></head>
<body>...</body>
</html>
3οΈβ£ HTTPμ μ£Όμ νΉμ§.
1οΈβ£ κ°λ¨ν¨.
- HTTPλ ν
μ€νΈ κΈ°λ° νλ‘ν μ½λ‘, μ¬λμ΄ μ΄ν΄νκΈ° μ¬μ΄ λ°©μμΌλ‘ μ€κ³λμμ΅λλ€.
- κ° μμ²κ³Ό μλ΅μ λͺ νν κ΅¬μ‘°λ‘ λμ΄ μμ΄, μ½κ² ν΄μν μ μμ΅λλ€.
2οΈβ£ νμ₯μ±.
- HTTPλ νμ₯ κ°λ₯ν νλ‘ν μ½μ
λλ€.
- ν€λλ₯Ό ν΅ν λ€μν μ 보(μΈμ¦ μ 보, μΊμ± μ 보, λ°μ΄ν° νμ λ±)λ₯Ό μ μ‘ν μ μμΌλ©°, μλ‘μ΄ κΈ°λ₯λ μ½κ² μΆκ°ν μ μμ΅λλ€.
3οΈβ£ μ μ°μ±.
- HTTPλ λ€μν λ°μ΄ν° νμμ μ μ‘ν μ μμ΅λλ€.
- ν μ€νΈ, μ΄λ―Έμ§, λμμ λ± λ€μν μ½ν μΈ νμ μ μ§μνλ©°, ν΄λΌμ΄μΈνΈμ μλ²κ° μ΄λ₯Ό κ΅νν μ μμ΅λλ€.
4οΈβ£ 무μνμ±.
- κ° HTTP μμ²μ λ
립μ μΌλ‘ μ²λ¦¬λλ©°, μλ²λ μμ² κ°μ μνλ₯Ό μ μ§νμ§ μμ΅λλ€.
- μ΄λ₯Ό ν΅ν΄ μλ²λ νμ₯μ±κ³Ό λ¨μμ±μ μ μ§ν μ μμ§λ§, μΏ ν€λ μΈμ μ ν΅ν΄ μν μ μ§λ₯Ό 보μν μ μμ΅λλ€.
4οΈβ£ HTTPμ HTTPSμ μ°¨μ΄
-
HTTPS(HyperText Transfer Protocol Secure)λ HTTPμ 보μ κ³μΈ΅(SSL/TLS)μ΄ μΆκ°λ λ²μ μ
λλ€.
- HTTPSλ λ°μ΄ν°λ₯Ό μνΈννμ¬ μ μ‘νλ―λ‘, ν΄λΌμ΄μΈνΈμ μλ² κ°μ ν΅μ μ 보νΈν μ μμ΅λλ€.
- μ΄λ₯Ό ν΅ν΄ λ°μ΄ν°κ° μ 3μμ μν΄ λμ², λ³μ‘°, μμ‘°λλ κ²μ λ°©μ§ν©λλ€.
- HTTPSλ λ°μ΄ν°λ₯Ό μνΈννμ¬ μ μ‘νλ―λ‘, ν΄λΌμ΄μΈνΈμ μλ² κ°μ ν΅μ μ 보νΈν μ μμ΅λλ€.
π μ£Όμ μ°¨μ΄μ .
- HTTP : λ°μ΄ν°λ₯Ό μνΈννμ§ μκ³ νλ¬ΈμΌλ‘ μ μ‘.
- HTTPS : SSL/TLSλ₯Ό μ¬μ©νμ¬ λ°μ΄ν°λ₯Ό μνΈνν΄ μ μ‘.
5οΈβ£ κ²°λ‘ .
- HTTPλ μΉμμ ν΄λΌμ΄μΈνΈμ μλ² κ°μ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°λ λ° μ¬μ©λλ ν΅μ¬μ μΈ ν΅μ νλ‘ν μ½μ λλ€.
- μμ²-μλ΅ λͺ¨λΈμ κΈ°λ°μΌλ‘ νλ©°, 리μμ€ μ κ·Ό, λ°μ΄ν° μ μ‘, μΉ νμ΄μ§ λ‘λ© λ±μ μ¬μ©λ©λλ€.
- HTTPλ κ°λ¨νκ³ νμ₯ κ°λ₯νλ©°, νλ μΉμ κΈ°λ°μ μ΄λ£¨λ μ€μν νλ‘ν μ½μ λλ€.