[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 ํ—ค๋” ํ•„๋“œ๋กœ ์–ผ๋งˆ๋’ค์— ๋ณต๊ตฌ๋˜๋Š”์ง€ ๋ณด๋‚ผ ์ˆ˜๋„ ์žˆ์Œ

  • ๋„ค์ด๋ฒ„ ๋ธ”๋Ÿฌ๊ทธ ๊ณต์œ ํ•˜๊ธฐ
  • ๋„ค์ด๋ฒ„ ๋ฐด๋“œ์— ๊ณต์œ ํ•˜๊ธฐ
  • ํŽ˜์ด์Šค๋ถ ๊ณต์œ ํ•˜๊ธฐ
  • ์นด์นด์˜ค์Šคํ† ๋ฆฌ ๊ณต์œ ํ•˜๊ธฐ