πŸ‘¨‍πŸ’» Web Development/HTTP

[HTTP] 6.HTTP μƒνƒœμ½”λ“œ

Kim_dev 2023. 3. 3. 18:14

[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 헀더 ν•„λ“œλ‘œ μ–Όλ§ˆλ’€μ— λ³΅κ΅¬λ˜λŠ”μ§€ 보낼 μˆ˜λ„ 있음