π HTTP
: HyperText Transfer Ptotocol
- HyperText? - λ¬Έμμ λ¬Έμκ° λ§ν¬λ‘ μ°κ²°λμ΄ μμ.
- Transfer? - HTMLμ λ§λ μΉνμ΄μ§ λ¬Έμ(νμΌ)μ 보λΈλ€.
- Protoclol? - μ»΄ν¨ν°λΌλ¦¬ μ΄λ»κ² HTML νμΌμ μ£Όκ³ λ°μ μ§μ λν μν΅ λ°©μ λλ μ½μ
- HTTP λ§κ³ λ μ»΄ν¨ν°λΌλ¦¬ μν΅μ νλ λ€λ₯Έ λ°©μλ μ‘΄μ¬ν¨.
- μ¬μ©μκ° μ’μμ κ°μ κΈ°λ₯μ μμ²μ νλ©΄ μλ΅μ νλ€. μ΄ νλμ μμ΄ HTTP ν΅μ μ ν μ¬μ΄ν΄μ΄λ€.
- Request / Response (μμ²/μλ΅)
- μ»΄ν¨ν°λΌλ¦¬μ μν΅λ κ²°κ΅ μ¬λμ΄ νμμ μν΄ λ§λ μν΅ λ°©μμ΄κΈ° λλ¬Έμ μ¬λμ²λΌ ν
μ€νΈλ‘ μν΅νλ€.
- μμ² λ©μμ§ κ΅¬μ‘°
- HTTP μμ²μ νλ‘ νΈμνΈ(ν΄λΌμ΄μΈνΈ)μμ λ°±μλ(μλ²)μ λ°μ΄ν°μ²λ¦¬λ₯Ό μμνκΈ° μν΄ λ³΄λ΄λ λ©μΈμ§μ΄λ€. μ΄ λ©μΈμ§ ꡬ쑰λ μΈ λΆλΆμΌλ‘ μ΄λ£¨μ΄μ Έμλ€.
- strat line : μμ²μ 첫λ²μ§Έ μ€.
- HTTP Method: ν΄λΉ μμ²μ΄ μλν μ‘μ
μ μ μνλ λΆλΆ. μ£Όλ‘ GET, POST, DELETEκ° λ§μ΄ μ°μ
- Request target: ν΄λΉ requestκ° μ μ‘λλ λͺ©ν url
- HTTP Version: λ§ κ·Έλλ‘ μ¬μ©λλ HTTP λ²μ μ λ»νλ€. μ£Όλ‘ 1.1 λ²μ μ΄ λ리 μ°μ
β‘οΈ GET /login HTTP/1.1
ν΄μ: GET λ©μλλ‘ login μ΄λΌλ μμ² νκ²μ HTTP 1.1 λ²μ μΌλ‘ μμ²μ 보λ΄κ² λ€!
- headers : ν΄λΉ μμ²μ λν μΆκ°μ 보(λ©νλ°μ΄ν°)λ₯Ό λ΄κ³ μλ λΆλΆ
Key: Value κ°μΌλ‘ λμ΄μλ€ (JavaScriptμ κ°μ²΄, Pythonμ λμ
λ리 ννλΌκ³ 보면 λλ€)
μμ£Ό μ¬μ©λλ Headers μ μ 보μλ λ€μμ΄ μλ€
Headers: {
Host: μμ²μ 보λ΄λ λͺ©ν(νκ²)μ μ£Όμ. μ¦, μμ²μ 보λ΄λ μΉμ¬μ΄νΈμ κΈ°λ³Έ μ£Όμκ° λλ€. (ex. www.apple.co.kr)
User-Agent: μμ²μ 보λ΄λ ν΄λΌμ΄μΈνΈμ λν μ 보 (ex. chrome, firefox, safari, explorer)
Content-Type: ν΄λΉ μμ²μ΄ 보λ΄λ λ©μΈμ§ bodyμ νμ
(ex. application/json)
Content-Length: body λ΄μ©μ κΈΈμ΄
Authorization: νμμ μΈμ¦/μΈκ°λ₯Ό μ²λ¦¬νκΈ° μν΄ λ‘κ·ΈμΈ ν ν°μ Authroization μ λ΄λλ€
}
- body : μμ²μ μ€μ λ΄μ©(μμ²μ λ°λΌ μ‘΄μ¬νμ§ μμ μ μμ)
ex) λ‘κ·ΈμΈ μμ μλ²μ λ³΄λΌ μμ²μ λ΄μ©
Body: {
"user_email": "jun.choi@gmail.com"
"user_password": "wecode"
}
- μλ΅ λ©μΈμ§ ꡬ쑰
- status line : μλ΅μ μν μ€. μλ΅μ λν μ²λ¦¬μνλ₯Ό ν΄λΌμ΄μΈνΈ(νλ‘ νΈμλ)μκ² μλ €μ£Όλ©΄μ λ΄μ©μ μμνλ€.
- Headers : μμ²μ Headersμ μΌλ°μ μΌλ‘ λμΌνλ€. λ€λ§ μλ΅μμλ§ μ¬μ©λλ ν€λμ μ 보λ€μ΄ μλ€. ( ex. μμ²νλ λΈλΌμ°μ μ μ λ³΄κ° λ΄κΈ΄ User-Agent λμ , Server ν€λκ° μ¬μ©λλ€. )
- Body: μμ²μ Bodyμ μΌλ°μ μΌλ‘ λμΌνλ€. νμ§λ§ μμ²μ λ©μλμ λ°λΌ λ°μ΄ν°λ₯Ό μ μ‘ν νμκ° μλ κ²½μ°μλ Bodyκ° μμ μλ μλ€. κ°μ₯ λ§μ΄ μ¬μ©λλ Bodyμ λ°μ΄ν° νμ
μ JSONμ΄λ€.
Stateless
- HTTP κ°λ³ ν΅μ μ λͺ¨λ λ
립μ μ΄μ΄μ, κ³Όκ±°μ ν΅μ κ²°κ³Όλ₯Ό 보쑴νμ§ μλλ€. λ§μ½ λκ°μ μμ²μ΄ μλ€λ©΄ μλ‘κ° μλ‘μ μμ²μ λͺ¨λ¦. λ°λΌμ λ¨μ μ λ§μ½ λ‘κ·ΈμΈκ°μ μ νκΈ°λ₯μ΄ μλ€λ©΄ κ·Έ μ μ λ‘κ·ΈμΈμ νλ€λ κ²μ μ¦νλ₯Ό κ°μ΄ 보λ΄μ€μΌ ν¨. μ΄λ₯Ό ν ν°μ΄λΌκ³ ν¨.
(ν ν°μ λ°±μλκ° λ§λ€μ΄μ νλ‘ νΈμκ² μ€λ€. ν΄λΌμ΄μΈνΈμκ² μ£Όλκ²μ μλ )
HTTP Request Methods
- μ΄ λ©μλλ€μ νλ‘ νΈμλ(ν΄λΌμ΄μΈνΈ)μ μ
μ₯μμ μμ²μ μλκ° λ΄κΈ΄κ²μ΄λ€. λ°±μλμ μ
μ₯μμ μκ°νλ©΄ νΌλμ΄ μ¬ μ μμΌλ μ£Όμνμ.
- GET
- μ΄λ¦ κ·Έλλ‘ μ΄λ€ λ°μ΄ν°λ₯Ό μλ²λ‘λΆν° λ°μ(GET)μ¬ λ μ¬μ©νλ λ©μλ μ¦, λ°μ΄ν°λ₯Ό λ°μμ€κΈ°λ§ ν λ μ¬μ©λλ€.
- κ°μ₯ κ°λ¨νκ³ λ§μ΄ μ¬μ©λλ HTTPλ©μλμ΄λ€.
(μΆμ½λ μμ² λ©μΈμ§)
GET /shop/bag HTTP/1.1
Headers: {
"HOST": "https://www.apple.com/kr"
"Authroization": "kldiduajsadm@9df0asmzm" (μ μ κ° λ³ΈμΈμμ μ¦λͺ
ν μ μλ μΈμ¦/μΈκ° ν ν°)
}
(μΆμ½λ μλ΅ λ©μμ§)
HTTP/1.1 200 SUCCESS
Body: {
"message": "SUCCESS"
"carts": [
{
"productId": 10
"name": "Pro Display XDR - Nano-texture κΈλμ€"
"price": "β©7,899,000"
"quantity": 1
},
{
"productId": 20
"name": "Mac Pro"
"price": "β©73,376,000"
"quantity": 2
}
]
}
- POST
- λ°μ΄ν°λ₯Ό μμ±/μμ /μμ ν λ μ¬μ©νλ λ©μλ, μ¦ λ°μ΄ν°λ₯Ό μμ±,μμ ν λ λ§μ΄ μ¬μ©λκΈ° λλ¬Έμ λλΆλΆμ κ²½μ° μμ²μ bodyκ° ν¬ν¨λμ 보λ΄μ§λ€.
(μΆμ½λ μμ² λ©μΈμ§)
POST /shop/bag HTTP/1.1
Headers: {
"HOST": "https://www.apple.com/kr"
"Authroization": "kldiduajsadm@9df0asmzm" (μ μ κ° λ³ΈμΈμμ μ¦λͺ
ν μ μλ μΈμ¦/μΈκ° ν ν°)
}
Body: {
product: {
"productId": 30
"name": "12.9ν iPad Pro Wi-Fi + Cellular 128GB"
"color": "μ€νμ΄μ€ κ·Έλ μ΄"
"price": "β©1,499,000"
"quantity": 1
}
}
(μΆμ½λ μλ΅ λ©μμ§)
HTTP/1.1 201 SUCCESS
Body: {
"message": "SUCCESSFULLY CARTS UPDATED"
}
- DELETE
- νΉμ λ°μ΄ν°λ₯Ό μλ²μμ μμ μμ²μ λ³΄λΌ λ μ°λ λ©μλ
(μΆμ½λ μμ² λ©μΈμ§)
DELETE /shop/bag HTTP/1.1
Headers: {
"HOST": "https://www.apple.com/kr"
"Authroization": "kldiduajsadm@9df0asmzm" (μ μ κ° λ³ΈμΈμμ μ¦λͺ
ν μ μλ μΈμ¦/μΈκ° ν ν°)
}
Body: {
productId: 30
}
(μΆμ½λ μλ΅ λ©μμ§)
HTTP/1.1 201 SUCCESS
Body: {
"message": "productId 30 DELETED"
}
λνμ μΈ Status code
- Status Codeμ μ«μμ κ°κ° μλ―Έκ° λ΄ν¬λμ΄μλ€. μ΄ Status Codeλ§ λ³΄μλ μλ΅μ΄ μ λλ‘ λλμ§ μ λλμ§λ₯Ό νμ
ν μ μλ€.
- 200 : OK
- λ¬Έμ μμ΄ μμ²μ λν μ²λ¦¬κ° λ°±μλ μλ²μμ μ΄λ£¨μ΄μ§λκ³ λμ μ€λ μλ΅ μ½λ
- 201 : Created
- 무μΈκ°κ° μ μμ±λμμ λμ μ€λ μλ΅ μ½λ
- λκ² POST λ©μλμ μμ²μ λ°λΌ λ°±μλ μλ²μ λ°μ΄ν°κ° μ μμ±,μμ λμμ λμ 보λ΄λ μ½λ
- 400 : Bad Request
- ν΄λΉ μμ²μ΄ μλͺ»λμμ λ 보λ΄λ μλ΅ μ½λ
- μ£Όλ‘ μμ²μ Bodyμ 보λ΄λ λ΄μ©μ΄ μλͺ»λμμ λ μ¬μ©λλ μ½λ
ex) μ νλ²νΈλ₯Ό 보λ΄μΌ νλλ° μ«μκ° μλ λ¬Έμμ΄μ μ£Όμκ° λμ Bodyμ λ΄κ²Όμ κ²½μ°
- 401 : Unauthorized
- μ μ κ° ν΄λΉ μμ²μ μ§ννλ €λ©΄ λ¨Όμ λ‘κ·ΈμΈμ νκ±°λ νμκ°μ
μ΄ νμνλ€λ μλ―Έ
ex) μ’μμ, wish listκΈ°λ₯μ νμμ΄ μλλ©΄ λ³΄λΌ μ μμ.
- 403 : Forbidden
- μ μ κ° ν΄λΉ μμ²μ λν κΆνμ΄ μλ€λ λ»
- μ κ·Ό λΆκ°λ₯ν μ 보μ μ κ·Όνμ κ²½μ°
ex) μ€μ§ μ λ£νμλ§ μ κ·Όν μ μλ λ°μ΄ν°λ₯Ό μμ²νμ λ
- 404 : Not Found
- μμ²λ URLμ΄ μ‘΄μ¬νμ§ μλλ€λ μλ―Έ
- 500 : Internal Server Error
- μλ²μμ μλ¬κ° λ¬μ λμ μλ΅ μ½λ
- (API κ°λ°μ νλ λ°±μλ κ°λ°μλ€μ΄ μ«μ΄νλ μ½λ,,,)