μμλ³Ό λ΄μ©
- HTTP νΉμ±
- HTTP λ©μμ§ κ΅¬μ‘°
- HTTP λ©μλ
- HTTP μν μ½λ
HTTPμ νΉμ±
- HTTP (Hypertext Transfer Protocol) : μμ© κ³μΈ΅μμ μ 보λ₯Ό μ£Όκ³ λ°λ λ° μ¬μ©λλ νλ‘ν μ½
λ³΅μ΅ : μ§κΈκΉμ§ λ°°μ΄ κ³μΈ΅λ³ νλ‘ν μ½
- 물리 κ³μΈ΅, λ°μ΄ν° λ§ν¬ κ³μΈ΅ β μ΄λλ·
- λ€νΈμν¬ κ³μΈ΅ β IP (μΈν°λ· νλ‘ν μ½)
- μ μ‘ κ³μΈ΅ β TCP, UDP
- μμ© κ³μΈ΅ β HTTP
νΉμ± 1 : μμ² - μλ΅ κΈ°λ° νλ‘ν μ½
- ν΄λΌμ΄μΈνΈμ μλ²κ° μλ‘ HTTP μμ² λ©μμ§μ HTTP μλ΅ λ©μμ§λ₯Ό μ£Όκ³ λ°λ κ΅¬μ‘°λ‘ λμ
- ν΄λΌμ΄μΈνΈ : HTTP μμ² λ©μμ§λ‘ μλ²μ μμ μμ²
- μλ² : HTTP μλ΅ λ©μμ§λ‘ μμ²λ°μ μμμ λν΄ μλ΅
- HTTP μμ² λ©μμ§μ HTTP μλ΅ λ©μμ§λ ννκ° λ€λ¦
νΉμ± 2 : λ―Έλμ΄ λ 립μ νλ‘ν μ½
- HTTPλ μμμ νΉμ±μ μ μ΄νμ§ μκ³ μμκ³Ό μνΈ μμ© νλ λ° μ¬μ©ν μ μλ μΈν°νμ΄μ€λ§ μ μ
- HTML, JPEG, PNG, JSON, XML, PDF λ± λͺ¨λ κ°λ₯
- λ―Έλμ΄ νμ
(MIME1 νμ
) : HTTPμμ μ£Όκ³ λ°λ μμμ μ’
λ₯
- νν :
νμ /μλΈνμ ;λ§€κ°λ³μ=κ°
- νμ : λ°μ΄ν° μ ν
- μλΈνμ : μ£Όμ΄μ§ νμ μ λν μΈλΆ μ ν
- λ§€κ°λ³μ : λΆκ°μ μ€λͺ
μν΄ μ νμ μΌλ‘ μΆκ°
- type/html;charset=UTF-8 : HTML λ¬Έμμ΄κ³ μ¬μ©λ λ¬Έμλ UTF-8λ‘ μΈμ½λ©
- λ§€μ° λ€μνλ©° νμμ λ°λΌ μλ‘κ² λ±λ‘ κ°λ₯
- λνμ μΈ νμ
- μλΈνμ
- text - plain, html, css, javascript
- image β png, jpeg, webp, gif
- video - mp4, ogg, webm
- audio - midi, wav
- application - octet-stream, pdf, xml, json, x-www-form-urlencoded
- multipart - form-data, encrypted
- νν :
νΉμ± 3 : Stateless νλ‘ν μ½
- Stateless : μλ²κ° HTTP μμ²μ λ³΄λΈ ν΄λΌμ΄μΈνΈμ κ΄λ ¨λ μν κΈ°μ΅νμ§ μμ β λ 립μ μΈ μμ²μΌλ‘ κ°μ£Ό
- μ stateless?
- λ§μ ν΄λΌμ΄μΈνΈμ λμ μνΈ μμ©νλλ° μν κΈ°μ΅νλ©΄ λΆλ΄
- μ¬λ¬ μλ²λ‘ ꡬμ±λμ΄ μμ κ²½μ° μλ² κ° μν μ 보 곡μ λ 볡μ‘
- νμν κ²½μ° μΈμ λ μλ² μΆκ° κ°λ₯ν΄μ νμ₯μ± λμ
- λ¬Έμ μκΈ΄ μλ² μ½κ² κ΅μ²΄ κ°λ₯ν΄μ κ²¬κ³ μ± λμ
- μνλ₯Ό μ μ§νμ§ μλ νΉμ±μ 보μνκΈ° μν λͺ κ°μ§ λ°©λ² μμ
νΉμ± 4 : μ§μ μ°κ²° νλ‘ν μ½
- κ³Όκ±° HTML (HTML 1.0 μ΄ν)λ λΉμ°κ²°ν νλ‘ν μ½
- 3-way handshakeλ‘ TCP μ°κ²° μ립 β μμ², μλ΅ β μ°κ²° μ’ λ£
- μΆκ°μ μΈ μμ², μλ΅νλ €λ©΄ TCP μ¬μ°κ²°
- μ΅κ·Ό HTML (HTML 1.1 μ΄μ) : μ§μ μ°κ²° νλ‘ν μ½ (keep-alive)
- νλμ TCP μ°κ²°μμμ μ¬λ¬ μμ², μλ΅ μ£Όκ³ λ°μ μ μμ
HTTP λ©μμ§ κ΅¬μ‘°
- HTML 1.1 κΈ°μ€
μμ λΌμΈ : HTTP μμ² λ©μμ§μΈ κ²½μ° μμ² λΌμΈ, HTTP μλ΅ λ©μμ§μΈ κ²½μ° μν λΌμΈ
- μμ² λΌμΈ
- λ©μλ : ν΄λΌμ΄μΈνΈκ° μλ²μ μμμ λν΄ μνν μμ
μ μ’
λ₯
- GET, POST, PUT, DELETE
- μμ² λμ : HTTP μμ²μ λ³΄λΌ μλ²μ μμ
- λ³΄ν΅ URL λͺ μ
http://www.example.com/hello?q=world
μΈ κ²½μ°/hello?q=world
κ° μμ² λμ- νμ κ²½λ‘ μμ΄λ μμ² λμμ
/
λ‘ νκΈ°
- HTTP λ²μ :
HTTP/<λ²μ >
μ νν
- λ©μλ : ν΄λΌμ΄μΈνΈκ° μλ²μ μμμ λν΄ μνν μμ
μ μ’
λ₯
- μν λΌμΈ
- μν μ½λ : μμ²μ λν κ²°κ³Όλ₯Ό νλ¨νλ μΈ μ리 μ μ
- μ΄μ ꡬ문 : μν μ½λμ λν λ¬Έμμ΄ ννμ μ€λͺ
- μμ
HTTP/1.1 200 OK
HTTP/1.1 404 Not Found
νλ λΌμΈ : 0κ° μ΄μμ HTTP ν€λ λͺ μ
- HTTP ν€λ : ν΅μ μ νμν λΆκ° μ 보
- μ½λ‘ (:)μ κΈ°μ€μΌλ‘ ν€λ μ΄λ¦κ³Ό νλ μ΄μμ ν€λ κ°μΌλ‘ ꡬμ±
λ©μμ§ λ³Έλ¬Έ : HTTP μμ² νΉμ μλ΅ λ©μμ§μμ λ³Έλ¬Έμ΄ νμν κ²½μ° λͺ μ
- μ‘΄μ¬νμ§ μμ μ μκ³ λ€μν μ½ν μΈ νμ μ΄ μ¬μ©λ μ μμ
HTTP λ©μλ
GET : μμμ μ΅λνκΈ° μν λ©μλ
- μΉ λΈλΌμ°μ λ₯Ό ν΅ν΄ μ‘°ννλ λλΆλΆμ μμμ GET μμ²μ λν μλ΅
- μμ² λ©μμ§
GET /index.html?name1=value1&name2=value2 HTTP/1.1 Host: www.example.com Accept: *
- μμ² λμ : 쿼리 λ¬Έμμ΄ λ§μ΄ μ¬μ©
- Host ν€λ : μμ²μ λ³΄λΌ νΈμ€νΈ λͺ μ
- μλ΅ λ©μμ§
HTTP/1.1 200 OK Content-Type: text/html Content-Length: 1234 <!DOCTYPE html> <html> <head> <title>Example Page</title> </head> <body> <h1>Hello, World!</h1> </body> </html>
HEAD : GETκ³Ό λμΌνλ, ν€λλ§μ λ°λ λ©μλ
- μλ΅ λ©μμ§μ λ³Έλ¬Έ ν¬ν¨ μλλ κ²μ΄ GETκ³Όμ μ°¨μ΄
POST : μλ²λ‘ νμ¬κΈ νΉμ μμ μ μ²λ¦¬νκ²λ νλ λ©μλ
-
λ²μ©μ± λ§€μ° λμ
- λ§μ κ²½μ° ν΄λΌμ΄μΈνΈκ° μλ²μ μλ‘μ΄ μμμ μμ±νκ³ μ ν λ μ¬μ©
-
μμ² λ©μμ§ (κ²μκΈ μμ±)
POST /posting HTTP/1.1 Host: example.com ... { "Id": 1, "Title": "μ λͺ©", "Contents": "λ΄μ©" }
-
μλ΅ λ©μμ§
HTTP/1.1 201 Created Content-Type: application/json Content-Length: 100 Date: Mon, 14 Oct 2024 16:35:00 PST Location: /posting/1 { "Id": 1, "Title": "μ λͺ©", "Contents": "λ΄μ©" }
- Location ν€λλ‘ μλ‘ μμ±λ μμμ μμΉ μ λ¬
PUT : μμμ λ체νκΈ° μν λ©μλ
- μμ² μμμ΄ μλ€λ©΄ μλ‘κ² μμ±, μλ€λ©΄ λ체
PATCH : μμμ λν λΆλΆμ μμ μ μν λ©μλ
- PUTκ³Ό λ¬λ¦¬ λΆλΆμ μμ
DELETE : μμμ μμ νκΈ° μν λ©μλ
- μμ² λ©μμ§
DELETE /texts/a.txt HTTP/1.1 Host: example.com
API λ¬Έμ
μ΄λ€ URLλ‘ μ΄λ€ μμ²μ λ°μμ λ μλ²λ μ΄λ»κ² μλ΅ν μ§ μ 리ν λ¬Έμ
- κ°μ URLμ λν μμ²μ΄λΌλ μ¬μ©λ λ©μλκ° λ€λ₯΄λ©΄ κ°κΈ° λ€λ₯Έ μμ²
- λ°λΌμ μ΄κ²μ μ€κ³νλ κ²μ κ°λ°μμ λͺ«
HTTP μν μ½λ : μμ²μ λν κ²°κ³Όλ₯Ό λνλ΄λ μΈ μ리 μ μ
200λ²λ: μ±κ³΅ μν μ½λ
- 200 (OK) : μμ²μ΄ μ±κ³΅νμ
- 201 (Created) : μμ²μ΄ μ±κ³΅νμΌλ©°, μλ‘μ΄ μμμ΄ μμ±λμμ
- 202 (Accepted) : μμ²μ μ λ°μμΌλ, μμ§ μμ²ν μμ
μ λλ΄μ§ μμμ
- λμ©λ νμΌ μ λ‘λ μμ , λ°°μΉ μμ λ±
- 204 (No Content) : μμ²μ΄ μ±κ³΅νμ§λ§, λ©μμ§ λ³Έλ¬ΈμΌλ‘ νμν λ°μ΄ν°κ° μμ
- DELETE μμ² λ±
300λ²λ: 리λ€μ΄λ μ 2 μν μ½λ
-
λμ λ°©μ
- μ΄κΈ° μμ² :
GET /old HTTP/1.1
- μλ΅ :
HTTP/1.1 301 Moved Pemanently \n Location: /new
- μ¬μμ² :
GET /new HTTP/1.1
- μλ΅ :
HTTP/1.1 200 OK
- μ΄κΈ° μμ² :
-
μꡬμ 리λ€μ΄λ μ : μμμ΄ μμ ν μλ‘μ΄ κ³³μΌλ‘ μ΄λνμ¬ κ²½λ‘κ° μꡬμ μΌλ‘ μ¬μ§μ
- 301 (Moved Permanently) : μꡬμ 리λ€μ΄λ μ
; μ¬μμ² λ©μλ λ³κ²½λ μ μμ
- μ²μμλ GET, λλ²μ§Έ μ¬μμ²μ POSTκ° λ μλ μμ
- 308 (Permanent Redirect) : μꡬμ 리λ€μ΄λ μ ; μ¬μμ² λ©μλ λ³κ²½λμ§ μμ
- 301 (Moved Permanently) : μꡬμ 리λ€μ΄λ μ
; μ¬μμ² λ©μλ λ³κ²½λ μ μμ
-
μΌμμ 리λ€μ΄λ μ : μμμ μμΉ μμλ‘ λ³κ²½ νΉμ μμλ‘ μ¬μ©ν URLμ΄ νμν κ²½μ°μ μ¬μ©
- 302 (Found) : μΌμμ 리λ€μ΄λ μ ; μ¬μμ² λ©μλ λ³κ²½λ μ μμ
- 303 (See Other) : μΌμμ 리λ€μ΄λ μ ; μ¬μμ² λ©μλ GETμΌλ‘ λ³κ²½
- 307 (Temporary Redirect) : μΌμμ 리λ€μ΄λ μ ; μ¬μμ² λ©μλ λ³κ²½λμ§ μμ
-
μμ²μ λ€λ₯Έ URLλ‘ μ΄λμν¬ μλ μκ³ βμΊμβλ‘ μ΄λμν¬ μλ μμ
- 304 (Not Modified) κ° μΊμ κ΄λ ¨ μν μ½λ
- μΊμ λΆλΆμμ μ€λͺ
400λ²λ: ν΄λΌμ΄μΈνΈ μλ¬ μν μ½λ
- 400 (Bad Request) : ν΄λΌμ΄μΈνΈμ μμ²μ΄ μλͺ»λμμ
- 401 (Unauthorized) : μμ²ν μμμ λν μ ν¨ν μΈμ¦μ΄ μμ ^3109ad
- μλ²λ μλ΅ λ©μμ§μ WWW-Authenticate ν€λλ₯Ό ν΅ν΄ μΈμ¦ λ°©λ²μ μλ €μ€μΌ ν¨
- 403 (Forbidden) : μμ²μ΄ μλ²μ μν΄ κ±°λΆλ¨
- μ κ·Ό κΆνμ΄ μμ κ²½μ°
- 404 (Not Found) : μμ²λ°μ μμμ μ°Ύμ μ μμ
- 405 (Method Not Allowed) : μμ²ν λ©μλλ₯Ό μ§μνμ§ μμ
500λ²λ: μλ² μλ¬ μν μ½λ
- 500 (Internal Server Error) : μμ²μ μ²λ¦¬ν μ μμ
- 502 (Bad Gateway) : μ€κ° μλ²μ ν΅μ μ€λ₯
- λ³΄ν΅ ν΄λΌμ΄μΈνΈμ μλ² μ¬μ΄μλ κ²μ΄νΈμ¨μ΄λ₯Ό λΉλ‘―ν μ¬λ¬ μ€κ° μλ² μ‘΄μ¬
- 503 (Service Unavailable) : νμ¬λ μμ²μ μ²λ¦¬ν μ μμΌλ μΆν κ°λ₯ν μλ μμ ^0a6cae
- μλ² κ³ΌλΆν νΉμ μΌμμ μΈ μ κ² μνμΈ κ²½μ° λ°μ
HTTPμ λ°μ
- HTTP/0.9
- μ΄μ°½κΈ° λ²μ
- GETλ§ μ¬μ© κ°λ₯, μμ² λ©μμ§ ν μ€λ‘ ꡬμ±
- ν€λ λ―Έμ§μ
- HTTP/1.0
- HEAD, POST λ± μ§μ
- ν€λ μ§μ
- μ§μ μ°κ²° λ―Έμ§μ
- HTTP/1.1
- μ§μ μ°κ²° 곡μ μ§μ
- νμ΄νλΌμ΄λ μ§μ (νΉμ μμ²μ λν μλ΅ μμ λκΈ° μ λ€μ μμ² λ³΄λΌ μ μλ κΈ°λ₯)
- μ½ν μΈ νμ κΈ°λ₯ λ± λ€μν νΈμ κΈ°λ₯ λ° ν€λ μΆκ°
- HTTP/2.0
- 1.1 λ²μ 보μ λ° κ°μ
- μ‘μμ ν¨μ¨ κ°μ : ν€λ μμΆ μ μ‘, λ°μ΄λ리 λ°μ΄ν° κΈ°λ° λ©μμ§ μ‘μμ
- μλ² νΈμ μ 곡 (ν΄λΌμ΄μΈνΈκ° μμ²μνλλΌλ νμν κ²μΌλ‘ μμλλ μμ 미리 μ μ‘)
- λ©ν°νλ μ±3 λμ μΌλ‘ HOL λΈλ‘νΉ4 μν
- HTTP/3.0
- κΈ°μ‘΄ HTTPλ λͺ¨λ TCPκΈ°λ°μΈ λ°λ©΄ 3.0μ UDP κΈ°λ°μΌλ‘ ꡬνλ QUIC (Quick UDP Internet Connections) νλ‘ν μ½ κΈ°λ°μΌλ‘ λμ
- μλ μΈ‘λ©΄μμ ν° κ°μ
Footnotes
-
Multipurpose Internet Mail Extensions Type β©
-
ν΄λΌμ΄μΈνΈκ° μμ²ν μμμ΄ λ€λ₯Έ κ³³μ μμ λ, ν΄λΌμ΄μΈνΈμ μμ²μ λ€λ₯Έ κ³³μΌλ‘ μ΄λμν€λ κ² β©
-
μ¬λ¬ μ€νΈλ¦Όμ μ΄μ©ν΄ λ³λ ¬μ μΌλ‘ λ©μμ§ μ£Όκ³ λ°λ κΈ°μ β©
-
Head-of-Line λΈλ‘νΉ. κ°μ νμ λκΈ°νλ©° μμ°¨μ μΌλ‘ μ²λ¦¬λλ μ¬λ¬ ν¨ν·μ΄ μμ λ, 첫 λ²μ§Έ ν¨ν·μ μ²λ¦¬ μ§μ°μΌλ‘ λλ¨Έμ§λ μ§μ°λλ λ¬Έμ β©