[HTTP] 6.HTTP μνμ½λ
[HTTP] 6.HTTP μνμ½λ
1. HTTP μνμ½λ
ν΄λΌμ΄μΈνΈκ° λ³΄λΈ μμ²μ μ²λ¦¬ μνλ₯Ό μλ΅μμ μλ €μ£Όλ κΈ°λ₯
- 1xx (Informational) : μμ²μ΄ μμ λμ΄ μ²λ¦¬μ€
- 2xx (Successful) : μμ² μ μ μ²λ¦¬
- 3xx (Redirection) : μμ²μ μλ£νλ €λ©΄ μΆκ° νλμ΄ νμ
- 4xx (Client Error) : ν΄λΌμ΄μΈνΈ μ€λ₯, μλͺ»λ λ¬Έλ² λ±μΌλ‘ μλ²κ° μμ²μ μνν μ μμ
- 5xx (Server Error) : μλ² μ€λ₯, μλ²κ° μ μ μμ²μ μ²λ¦¬νμ§ λͺ»ν¨
λ§μ½ λͺ¨λ₯΄λ μν μ½λκ° λνλλ©΄?
- ν΄λΌμ΄μΈνΈκ° μΈμν μ μλ μνμ½λλ₯Ό μλ²κ° λ°ννλ©΄?
- ν΄λΌμ΄μΈνΈλ μμ μ½λλ‘ ν΄μν΄μ μ²λ¦¬
- λ―Έλμ μλ‘μ΄ μν μ½λκ° μΆκ°λμ΄λ ν΄λΌμ΄μΈνΈλ₯Ό λ³κ²½νμ§ μμλ λ¨
- ex) 299 ??? -> 2xx (Successful)
451 ??? -> 4xx (Client Error)
599 ??? -> 5xx (Server Error)
1xx (Informational) : μμ²μ΄ μμ λμ΄ μ²λ¦¬μ€
- κ±°μ μ¬μ©νμ§ μμΌλ―λ‘ μλ΅
2xx (Successful) : μμ² μ μ μ²λ¦¬
- μ±κ³΅
200 OK 201 Created 202 Accepted 204 NO Content |
<1> 200 OK
<2> 201 Created
<3> 202 Accepted
- μμ²μ΄ μ μλμμΌλ μ²λ¦¬κ° μλ£λμ§ μμ
- λ°°μΉ μ²λ¦¬ κ°μ κ³³μμ μ¬μ©
ex) μμ² μ μ ν 1μκ° λ€μ λ°°μΉ νλ‘μΈμ€κ° μμ²μ μ²λ¦¬
<4> 204 No Content
- μλ²κ° μμ²μ μ±κ³΅μ μΌλ‘ μννμ§λ§, μλ΅ νμ΄λ‘λ λ³Έλ¬Έμ λ³΄λΌ λ°μ΄ν°κ° μμ
- ex) μΉ λ¬Έμ νΈμ§κΈ°μμ save λ²νΌ
- save λ²νΌμ κ²°κ³Όλ‘ μ무 λ΄μ©μ΄ μμ΄λ λ¨
- save λ²νΌμ λλ¬λ κ°μ νλ©΄μ μ μ§ν΄μΌν¨
- κ²°κ³Ό λ΄μ©μ΄ μμ΄λ 204 νμ΄μ§(2xx)λ§μΌλ‘ μ±κ³΅μ μΈμν μ μμ
* κ°λ°ν λ 200λ§ / 200, 201λ§ μ¬μ©νλ κ²½μ° λ§μ
3xx (Redirection) : μμ²μ μλ£νλ €λ©΄ μΆκ° νλμ΄ νμ
300 Multiple Choices 301 Moved Permanently 302 Found 303 See Other 304 Not Modified 307 Temporary Redirect 308 Permanent Redirect |
리λ€μ΄λ μ μ΄ν΄
- μΉλΈλΌμ°μ λ 3xx μλ΅μ κ²°κ³Όμ Location ν€λκ° μμΌλ©΄, Location μμΉλ‘ μλ μ΄λ (= 리λ€μ΄λ νΈ)
[μλ 리λ€μ΄λ νΈ νλ¦]
리λ€μ΄λ μ μ’ λ₯
(1) μꡬ 리λ€μ΄λ μ (νΉμ 리μμ€μ URIκ° μꡬμ μΌλ‘ μ΄λ)
- ex) /members -> /users
- ex) /event -> /new-event
301, 308
- μλ URL μ¬μ©X, κ²μ μμ§ λ±μμλ λ³κ²½ μΈμ§
- 301 Moved Permanently : 리λ€μ΄λ νΈ μμ² λ©μλκ°GETμΌλ‘ λ³νκ³ λ³Έλ¬Έ μ κ±°λ μ μμ (MAY, νμ κ·Έλ°κ±΄ μλ)
- 308 Permanent Redirect : 리λ€μ΄λ νΈμ μμ² λ©μλμ λ³Έλ¬Έ μ μ§
[301]
[308]
* λ³΄ν΅ μ€λ¬΄μμλ 301 μμΌλ‘ μ²λ¦¬ λ§μ΄ν¨ (URL λ°λλ©΄ μ λ¬ν΄μΌνλ λ°μ΄ν° λ°λκΈ° λλ¬Έμ GETμΌλ‘ λ°κΎΈλκ² λ§μ)
* μ€λ¬΄μμλ 301λ μ μνκ³ μΌμμ 리λ€μ΄λ μ μ λ§μ΄ μ¬μ©ν¨
(2) μΌμμ 리λ€μ΄λ μ (리μμ€ URIκ° μΌμμ μΌλ‘ λ³κ²½)
- μ£Όλ¬Έ μλ£ ν μ£Όλ¬Έ λ΄μ νλ©΄μΌλ‘ μ΄λ
- PRG : POST / Redirect / Get
- λ°λΌμ κ²μ μμ§ λ±μμ URL λ³κ²½νλ©΄ μλ¨
302 Found
- 리λ€μ΄λ νΈμ μμ² λ©μλκ° GETμΌλ‘ λ³νκ³ λ³Έλ¬Έμ΄ μ κ±°λ μ μμ (MAY)
307 Temporary Redirect
- 302μ κΈ°λ₯ κ°μ
- 리λ€μ΄λ νΈμ μμ² λ©μλμ λ³Έλ¬Έ μ μ§(μμ² λ©μλλ₯Ό λ³κ²½νλ©΄ μλ¨, MUST NOT)
303 See Other
- 302μ κΈ°λ₯ κ°μ
- 리λ€μ΄λ νΈμ μμ² λ©μλκ° GETμΌλ‘ λ³κ²½
PRG (POST / Redirect / Get)
μΌμμ μΈ λ¦¬λ€μ΄λ μ - μμ
- POSTλ‘ μ£Όλ¬Έ νμ λΈλΌμ°μ μλ‘κ³ μΉ¨νλ©΄?
-> μλ‘κ³ μΉ¨μ λ€μ μμ²
-> μ€λ³΅ μ£Όλ¬Έμ΄ λ μ μλ€
[PRG μ¬μ©μ ]
[PRG μ¬μ©ν]
* λ¬Όλ‘ μλ²μμ λ§μμΌν¨ (μ΄λ―Έ μ¬μ©λ μ£Όλ¬Έλ²νΈμ λλ€ λ±)
* ν΄λΌμ΄μΈνΈμμ ν λ² λ μ΄λ κ² λ§μμ£Όλ κ²μ΄ μ’μ
* μ£Όλ¬Έ μλ£νλ©΄μμ μλ‘κ³ μΉ¨ν΄λ GETμΌλ‘ κ²°κ³Ό νλ©΄λ§ μ‘°ν
μμ)
- POSTλ‘ μ£Όλ¬Έ ν μλ‘ κ³ μΉ¨μΌλ‘ μΈν μ€λ³΅ μ£Όλ¬Έ λ°©μ§ - POSTλ‘ μ£Όλ¬Έ νμ μ£Όλ¬Έ κ²°κ³Ό νλ©΄μ GET λ©μλλ‘ λ¦¬λ€μ΄λ νΈ - μλ‘κ³ μΉ¨ν΄λ κ²°κ³Ό νλ©΄μ GETμΌλ‘ μ‘°ν - μ€λ³΅ μ£Όλ¬Έ λμ μ κ²°κ³Ό νλ©΄λ§ GETμΌλ‘ λ€μ μμ² |
κ·Έλμ λ μ¨μΌνλκ°?
307, 303 κΆμ₯νμ§λ§ 302λ₯Ό κΈ°λ³Έκ°μΌλ‘ μ¬μ© μλ 리λ€μ΄λ μ μμ GETμΌλ‘ λ³ν΄λ λλ©΄ 302λ₯Ό μ¬μ©ν΄λ λ¬Έμ μμ |
(3) κΈ°ν 리λ€μ΄λ μ
- 300 Multiple Choices : μμ
- 304 Not Modified
> μΊμλ₯Ό λͺ©μ μΌλ‘ μ¬μ©
> ν΄λΌμ΄μΈνΈμκ² λ¦¬μμ€κ° μμ λμ§ μμμμ μλ €μ€
λ°λΌμ ν΄λΌμ΄μΈνΈλ λ‘컬 PCμ μ μ₯λ μΊμλ₯Ό μ¬μ¬μ© (μΊμλ‘ λ¦¬λ€μ΄λ νΈ)
> 304 μλ΅μ μλ΅μ λ©μμ§ λ°λλ₯Ό ν¬ν¨νλ©΄ μλ¨ (λ‘컬 μΊμλ₯Ό μ¬μ©ν΄μΌνλ―λ‘)
> μ‘°κ±΄λΆ GET, HEAD μμ²μ μ¬μ©
4xx (Client Error) : ν΄λΌμ΄μΈνΈ μ€λ₯, μλͺ»λ λ¬Έλ² λ±μΌλ‘ μλ²κ° μμ²μ μνν μ μμ
- ν΄λΌμ΄μΈνΈμ μμ²μ μλͺ»λ λ¬Έλ²λ±μΌλ‘ μλ²κ° μμ²μ μνν μ μμ
- μ€λ₯μ μμΈμ΄ ν΄λΌμ΄μΈνΈ
- μ€μ) ν΄λΌμ΄μΈνΈκ° μ΄λ―Έ μλͺ»λ μμ²/λ°μ΄ν°λ₯Ό 보λ΄κ³ μκΈ° λλ¬Έμ λκ°μ μ¬μλκ° μ€ν¨
400 Bad Request
- ν΄λΌμ΄μΈνΈκ° μλͺ»λ μμ²ν΄μ μλ²κ° μμ² μ²λ¦¬ λΆκ°
- μμ² κ΅¬λ¬Έ/λ©μμ§ λ±λ± μ€λ₯
- ν΄λΌμ΄μΈνΈλ μμ² λ΄μ©μ λ€μ κ²ν νκ³ λ³΄λ΄μΌν¨
- ex) μμ² νλΌλ―Έν°κ° μλͺ»λκ±°λ, API μ€νμ΄ λ§μ§ μμλ
401 Unauthorized
- ν΄λΌμ΄μΈνΈκ° ν΄λΉ 리μμ€μ λν μΈμ¦μ΄ νμ
- 401 μ€λ₯ λ°μμ μλ΅μ WWW-Authenticate ν€λμ ν¨κ» μΈμ¦ λ°©λ²μ μ€λͺ
- μ°Έκ³ )
> μΈμ¦(Authentication) : λ³ΈμΈμ΄ λꡬμΈμ§ νμΈ (λ‘κ·ΈμΈ)
> μΈκ° (Authorization) : κΆνλΆμ¬ (ADMIN κΆνμ²λΌ νΉμ 리μμ€ μ κ·Ό κΆν / μΈμ¦μ΄ μμ΄μΌ μΈκ°κ° μμ)
> μ€λ₯ λ©μμ§κ° Unautorizedμ΄μ§λ§ μΈμ¦λμ§ μμμ μλ―Έ
403 Forbidden
- μλ²κ° μμ²μ μ΄ν΄νμ§λ§ μΉμΈ κ±°λΆ
- μ£Όλ‘ μΈμ¦ μ격 μ¦λͺ μ μμ§λ§ μ κ·Ό κΆνμ΄ λΆμΆ©λΆν κ²½μ°
ex) μ΄λλ―Ό λ±κΈμ΄ μλ μ¬μ©μκ° λ‘κ·ΈμΈ νμ§λ§ μ΄λλ―Ό λ±κΈμ 리μμ€μ μ κ·Όνλ κ²½μ°
404 Not Found
- μμ² λ¦¬μμ€ μλ²μ μμ
- λλ ν΄λΌμ΄μΈνΈκ° κΆνμ΄ λΆμ‘±ν 리μμ€μ μ κ·Όν λ ν΄λΉ 리μμ€λ₯Ό μ¨κΈ°κ³ μΆμ λ
5xx (Server Error) : μλ² μ€λ₯, μλ²κ° μ μ μμ²μ μ²λ¦¬νμ§ λͺ»ν¨
- μλ² λ¬Έμ λ‘ μ€λ₯ λ°μ
- μλ²μ λ¬Έμ κ° μκΈ° λλ¬Έμ μ¬μλνλ©΄ μ±κ³΅ν μλ μμ (λ³΅κ΅¬κ° λκ±°λ λ±λ±)
500 Internal Server Error
- μλ² λ΄λΆ λ¬Έμ λ‘ μ€λ₯ λ°μ
- μ 맀νλ©΄ 500μ€λ₯
503 Service Unavailable
- μλΉμ€ μ΄μ© λΆκ°
- μλ²κ° μΌμμ μΈ κ³ΌλΆν λλ μμ λ μμ μΌλ‘ μ μ μμ²μ μ²λ¦¬ν μ μμ
- Retry-After ν€λ νλλ‘ μΌλ§λ€μ 볡ꡬλλμ§ λ³΄λΌ μλ μμ