๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์›น ์„œ๋น„์Šค

HTTP ์ƒํƒœ์ฝ”๋“œ

by alswlfl 2022. 12. 2.

HTTP ์ƒํƒœ์ฝ”๋“œ ์†Œ๊ฐœ

์ƒํƒœ์ฝ”๋“œ: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ ์š”์ฒญ์˜ ์ฒ˜๋ฆฌ ์ƒํƒœ๋ฅผ ์‘๋‹ต์—์„œ ์•Œ๋ ค์ฃผ๋Š” ๊ธฐ๋Šฅ

  • 1xx (Informational): ์š”์ฒญ์ด ์ˆ˜์‹ ๋˜์–ด ์ฒ˜๋ฆฌ์ค‘ -> ๊ฑฐ์˜ ์‚ฌ์šฉ ์•ˆํ•จ
  • 2xx (Successful): ์š”์ฒญ ์ •์ƒ ์ฒ˜๋ฆฌ
  • 3xx (Redirection): ์š”์ฒญ์„ ์™„๋ฃŒํ•˜๋ ค๋ฉด ์ถ”๊ฐ€ ํ–‰๋™์ด ํ•„์š”
  • 4xx (Client Error): ํด๋ผ์ด์–ธํŠธ ์˜ค๋ฅ˜, ์ž˜๋ชป๋œ ๋ฌธ๋ฒ• ๋“ฑ์œผ๋กœ ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Œ
  • 5xx (Server Error): ์„œ๋ฒ„ ์˜ค๋ฅ˜, ์„œ๋ฒ„๊ฐ€ ์ •์ƒ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•จ

๋งŒ์•ฝ ๋ชจ๋ฅด๋Š” ์ƒํƒœ ์ฝ”๋“œ๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉด?

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ธ์‹ํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ์ฝ”๋“œ๋ฅผ ์„œ๋ฒ„๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋ฉด? → ์ƒ์œ„ ์ƒํƒœ์ฝ”๋“œ๋กœ ํ•ด์„ํ•˜์—ฌ ์ฒ˜๋ฆฌ
    • ex) 299? โ–บ 2xx(Successful)

1. 2xx (Successful): ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์„ฑ๊ณต์ ์œผ๋กœ ์ฒ˜๋ฆฌ

  • 200 OK: ์š”์ฒญ ์„ฑ๊ณต
  • 201 Created: ์š”์ฒญ ์„ฑ๊ณตํ•ด์„œ ์ƒˆ๋กœ์šด ๋ฆฌ์†Œ์Šค๊ฐ€ ์ƒ์„ฑ๋จ
  • 202 Accepted: ์š”์ฒญ์ด ์ ‘์ˆ˜๋˜์—ˆ์œผ๋‚˜ ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋˜์ง€ ์•Š์•˜์Œ
    • ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ ๊ฐ™์€ ๊ณณ์—์„œ ์‚ฌ์šฉ
    • ex) ์š”์ฒญ ์ ‘์ˆ˜ ํ›„ 1์‹œ๊ฐ„ ๋’ค์— ๋ฐฐ์น˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌ → ์ž˜ ์‚ฌ์šฉ ์•ˆํ•จ
  • 204 No Content: ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ–ˆ์ง€๋งŒ, ์‘๋‹ต ํŽ˜์ด๋กœ๋“œ ๋ณธ๋ฌธ์— ๋ณด๋‚ผ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์Œ
    • ex) ์›น ๋ฌธ์„œ ํŽธ์ง‘๊ธฐ์—์„œ save ๋ฒ„ํŠผ
    • save ๋ฒ„ํŠผ์˜ ๊ฒฐ๊ณผ๋กœ ์•„๋ฌด ๋‚ด์šฉ์ด ์—†์–ด๋„ ๋จ
    • save ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ๋„ ๊ฐ™์€ ํ™”๋ฉด์„ ์œ ์ง€
    • ๊ฒฐ๊ณผ ๋‚ด์šฉ์ด ์—†์–ด๋„ 204 ๋ฉ”์‹œ์ง€๋งŒ์œผ๋กœ ์„ฑ๊ณต์„ ์ธ์‹ํ•  ์ˆ˜ ์žˆ์Œ

2.  3xx (Redirection):  ์š”์ฒญ์„ ์™„๋ฃŒํ•˜๊ธฐ ์œ„ํ•ด ์œ ์ € ์—์ด์ „ํŠธ(์›น ๋ธŒ๋ผ์šฐ์ €)์˜ ์ถ”๊ฐ€ ์กฐ์น˜ ํ•„์š”

๋ฆฌ๋‹ค์ด๋ ‰์…˜

  • ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” 3xx ์‘๋‹ต์˜ ๊ฒฐ๊ณผ์— Locationํ—ค๋”๊ฐ€ ์žˆ์œผ๋ฉด, Location ์œ„์น˜๋กœ ์ž๋™ ์ด๋™
  • ex) ๋„๋ฆฌ ํผ์ง„ ์‚ฌ์šฉํ–ˆ๋˜ ๊ฒฝ๋กœ๊ฐ€ ๋ฐ”๋€ ๊ฒฝ์šฐ, ๊ธฐ์กด ๊ฒฝ๋กœ๋Š” ์“ฐ์ด์ง€ ์•Š๋Š”๋‹ค๊ณ  ์•Œ๋ ค์ฃผ๊ณ  ์ƒˆ๋กœ์šด ๊ฒฝ๋กœ๋ฅผ ์•Œ๋ ค์คŒ ์›น๋ธŒ๋ผ์šฐ์ €๋Š” ์„œ๋ฒ„์— ์ƒˆ๋กœ์šด ๊ฒฝ๋กœ๋ฅผ ๋‹ค์‹œ ์š”์ฒญ → ํ•ด๋‹น ๊ณผ์ •์ด ๋„ˆ๋ฌด ๋น ๋ฅด๊ฒŒ ์ง€๋‚˜๊ฐ€๋ฏ€๋กœ ์‚ฌ์šฉ์ž๋Š” ์ธ์‹ ๋ชปํ•จ
  • ์ข…๋ฅ˜
    • ์˜๊ตฌ ๋ฆฌ๋‹ค์ด๋ ‰์…˜: ํŠน์ • ๋ฆฌ์†Œ์Šค์˜ URI๊ฐ€ ์˜๊ตฌ์ ์œผ๋กœ ์ด๋™
      • ์˜ˆ) /members -> /users
      • ์˜ˆ) /event -> /new-event
    • ์ผ์‹œ ๋ฆฌ๋‹ค์ด๋ ‰์…˜: ์ผ์‹œ์ ์ธ ๋ณ€๊ฒฝ
      • ์ฃผ๋ฌธ ์™„๋ฃŒ ํ›„ ์ฃผ๋ฌธ ๋‚ด์—ญ ํ™”๋ฉด์œผ๋กœ ์ด๋™
      • PRG: Post/Redirect/Get
    • ํŠน์ˆ˜ ๋ฆฌ๋‹ค์ด๋ ‰์…˜
      • ๊ฒฐ๊ณผ ๋Œ€์‹  ์บ์‹œ ์‚ฌ์šฉ

์˜๊ตฌ ๋ฆฌ๋‹ค์ด๋ ‰์…˜(301, 308)

  • ๋ฆฌ์†Œ์Šค์˜ URI๊ฐ€ ์˜๊ตฌ์ ์œผ๋กœ ์ด๋™
  • ์›๋ž˜์˜ URL์„ ์‚ฌ์šฉ ์•ˆํ•จ, ๊ฒ€์ƒ‰ ์—”์ง„ ๋“ฑ์—์„œ๋„ ๋ณ€๊ฒฝ ์ธ์ง€
  • 301 Moved Permanently
    • ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ์‹œ ์š”์ฒญ ๋ฉ”์„œ๋“œ๊ฐ€ GET์œผ๋กœ ๋ณ€ํ•˜๊ณ , ๋ณธ๋ฌธ์ด ์ œ๊ฑฐ๋  ์ˆ˜ ์žˆ์Œ(MAY)
  • 308 Permanent Redirect
    • 301๊ณผ ๊ธฐ๋Šฅ์€ ๊ฐ™์Œ
    • ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ์‹œ ์š”์ฒญ ๋ฉ”์„œ๋“œ์™€ ๋ณธ๋ฌธ ์œ ์ง€(์ฒ˜์Œ POST๋ฅผ ๋ณด๋‚ด๋ฉด ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ๋„ ์œ ์ง€)

์ผ์‹œ์ ์ธ ๋ฆฌ๋‹ค์ด๋ ‰์…˜(302, 307, 303)

  • ๋ฆฌ์†Œ์Šค์˜ URI๊ฐ€ ์ผ์‹œ์ ์œผ๋กœ ๋ณ€๊ฒฝ
  • ๋”ฐ๋ผ์„œ ๊ฒ€์ƒ‰ ์—”์ง„ ๋“ฑ์—์„œ URL์„ ๋ณ€๊ฒฝํ•˜๋ฉด ์•ˆ๋จ
  • 302 Found -> GET์œผ๋กœ ๋ณ€ํ•  ์ˆ˜ ์žˆ์Œ
    • ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ์‹œ ์š”์ฒญ ๋ฉ”์„œ๋“œ๊ฐ€ GET์œผ๋กœ ๋ณ€ํ•˜๊ณ , ๋ณธ๋ฌธ์ด ์ œ๊ฑฐ๋  ์ˆ˜ ์žˆ์Œ(MAY)
  • 307 Temporary Redirect -> ๋ฉ”์„œ๋“œ๊ฐ€ ๋ณ€ํ•˜๋ฉด ์•ˆ๋จ
    • 302์™€ ๊ธฐ๋Šฅ์€ ๊ฐ™์Œ
    • ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ์‹œ ์š”์ฒญ ๋ฉ”์„œ๋“œ์™€ ๋ณธ๋ฌธ ์œ ์ง€(์š”์ฒญ ๋ฉ”์„œ๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ์•ˆ๋จ. MUST NOT)
  • 303 See Other -> ๋ฉ”์„œ๋“œ๊ฐ€ GET์œผ๋กœ ๋ณ€๊ฒฝ
    • 302์™€ ๊ธฐ๋Šฅ์€ ๊ฐ™์Œ
    • ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ์‹œ ์š”์ฒญ ๋ฉ”์„œ๋“œ๊ฐ€ GET์œผ๋กœ ๋ณ€๊ฒฝ
  • PRG: Post/Redirect/Get
    • POST๋กœ ์ฃผ๋ฌธ ํ›„์— ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ƒˆ๋กœ ๊ณ ์นจํ•˜๋ฉด? → ์ƒˆ๋กœ ๊ณ ์นจ์€ ๋‹ค์‹œ ์š”์ฒญ(์ค‘๋ณต ์ฃผ๋ฌธ ๋  ์ˆ˜ ์žˆ์Œ)
    • POST๋กœ ์ฃผ๋ฌธ ํ›„ ์ƒˆ๋กœ๊ณ ์นจ์œผ๋กœ ์ธํ•œ ์ค‘๋ณต ์ฃผ๋ฌธ ๋ฐฉ์ง€
    • POST๋กœ ์ฃผ๋ฌธ ํ›„์— ์ฃผ๋ฌธ ๊ฒฐ๊ณผ ํ™”๋ฉด์„ GET ๋ฉ”์„œ๋“œ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ
    • ์ƒˆ๋กœ๊ณ ์นจํ•ด๋„ ๊ฒฐ๊ณผ ํ™”๋ฉด์„ GET์œผ๋กœ ์กฐํšŒ
    • ์ค‘๋ณต ์ฃผ๋ฌธ ๋Œ€์‹ ์— ๊ฒฐ๊ณผ ํ™”๋ฉด๋งŒ GET์œผ๋กœ ๋‹ค์‹œ ์š”์ฒญ
    • PRG ์ดํ›„ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ
      • URL์ด ์ด๋ฏธ POST -> GET์œผ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ๋จ
      • ์ƒˆ๋กœ ๊ณ ์นจํ•ด๋„ GET์œผ๋กœ ๊ฒฐ๊ณผ ํ™”๋ฉด๋งŒ ์กฐํšŒ

๊ธฐํƒ€ ๋ฆฌ๋‹ค์ด๋ ‰์…˜(300, 304)

  • 300 Multiple Choices: ์•ˆ์”€
  • 304 Not Modified
    • ์บ์‹œ๋ฅผ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ
    • ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฆฌ์†Œ์Šค๊ฐ€ ์ˆ˜์ •๋˜์ง€ ์•Š์•˜์Œ์„ ์•Œ๋ ค์คŒ. ๋”ฐ๋ผ์„œ ํด๋ผ์ด์–ธํŠธ๋Š” ๋กœ์ปฌPC์— ์ €์žฅ๋œ ์บ์‹œ๋ฅผ ์žฌ์‚ฌ์šฉ(์บ์‹œ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ)
    • 304 ์‘๋‹ต์€ ์‘๋‹ต์— ๋ฉ”์‹œ์ง€ ๋ฐ”๋””๋ฅผ ํฌํ•จํ•˜๋ฉด ์•ˆ๋จ (๋กœ์ปฌ ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฏ€๋กœ)
    • ์กฐ๊ฑด๋ถ€ GET, HEAD ์š”์ฒญ ์‹œ ์‚ฌ์šฉ

3. 4xx (Client Error)

  • ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ์ž˜๋ชป๋œ ๋ฌธ๋ฒ• ๋“ฑ์œผ๋กœ ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Œ
  • ์˜ค๋ฅ˜์˜ ์›์ธ์ด ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์žˆ์Œ
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด๋ฏธ ์ž˜๋ชป๋œ ์š”์ฒญ, ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋˜‘๊ฐ™์€ ์žฌ์‹œ๋„๊ฐ€ ์‹คํŒจํ•จ -> ๋ณต๊ตฌ ๋ถˆ๊ฐ€๋Šฅ
  • 400 Bad Request: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ž˜๋ชป๋œ ์š”์ฒญ์„ ํ•ด์„œ ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์Œ
    • ์š”์ฒญ ๊ตฌ๋ฌธ, ๋ฉ”์‹œ์ง€ ๋“ฑ๋“ฑ ์˜ค๋ฅ˜
    • ํด๋ผ์ด์–ธํŠธ๋Š” ์š”์ฒญ ๋‚ด์šฉ์„ ๋‹ค์‹œ ๊ฒ€ํ† ํ•˜๊ณ  ๋ณด๋‚ด์•ผํ•จ
    • ex) ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์ž˜๋ชป๋˜๊ฑฐ๋‚˜, API ์ŠคํŽ™์ด ๋งž์ง€ ์•Š์„ ๋•Œ
  • 401 Unauthorized: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•ด๋‹น ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ธ์ฆ์ด ํ•„์š”ํ•จ
    • ์ธ์ฆ๋˜์ง€ ์•Š์Œ
    • 401 ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ ์‘๋‹ต์— WWW-Authenticate ํ—ค๋”์™€ ํ•จ๊ป˜ ์ธ์ฆ ๋ฐฉ๋ฒ• ์„ค๋ช…
    • ์ฐธ๊ณ 
      • ์ธ์ฆ(Authentication): ๋ณธ์ธ์ด ๋ˆ„๊ตฌ์ธ์ง€ ํ™•์ธ, (๋กœ๊ทธ์ธ)
      • ์ธ๊ฐ€(Authorization): ๊ถŒํ•œ ๋ถ€์—ฌ(ADMIN ๊ถŒํ•œ์ฒ˜๋Ÿผ ํŠน์ • ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ, ์ธ์ฆ์ด ์žˆ์–ด์•ผ ์ธ๊ฐ€๊ฐ€ ์žˆ์Œ)
      • ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ Unauthorized์ด์ง€๋งŒ ์ธ์ฆ ๋˜์ง€ ์•Š์Œ
  • 403 Forbidden: ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ดํ•ดํ–ˆ์ง€๋งŒ ์Šน์ธ์„ ๊ฑฐ๋ถ€
    • ์ฃผ๋กœ ์ธ์ฆ ์ž๊ฒฉ ์ฆ๋ช…์€ ์žˆ์ง€๋งŒ, ์ ‘๊ทผ ๊ถŒํ•œ์ด ๋ถˆ์ถฉ๋ถ„ํ•œ ๊ฒฝ์šฐ
  • 404 Not Found: ์š”์ฒญ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ
    • ์š”์ฒญ ๋ฆฌ์†Œ์Šค๊ฐ€ ์„œ๋ฒ„์— ์—†์Œ
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ถŒํ•œ์ด ๋ถ€์กฑํ•œ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ๋•Œ ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ์ˆจ๊ธฐ๊ณ  ์‹ถ์„ ๋•Œ

5xx (Server Error)

  • ์„œ๋ฒ„ ๋ฌธ์ œ๋กœ ์˜ค๋ฅ˜ ๋ฐœ์ƒ
  • ์„œ๋ฒ„์— ๋ฌธ์ œ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์žฌ์‹œ๋„ ํ•˜๋ฉด ์„ฑ๊ณตํ•  ์ˆ˜๋„ ์žˆ์Œ(๋ณต๊ตฌ๊ฐ€ ๋˜๊ฑฐ๋‚˜ ๋“ฑ๋“ฑ)
  • 500 Internal Server Error: ์„œ๋ฒ„ ๋ฌธ์ œ๋กœ ์˜ค๋ฅ˜ ๋ฐœ์ƒ, ์• ๋งคํ•˜๋ฉด 500 ์˜ค๋ฅ˜
    • ์„œ๋ฒ„ ๋‚ด๋ถ€ ๋ฌธ์ œ๋กœ ์˜ค๋ฅ˜ ๋ฐœ์ƒ
  • 503 Service Unavailable: ์„œ๋น„์Šค ์ด์šฉ ๋ถˆ๊ฐ€
    • ์„œ๋ฒ„๊ฐ€ ์ผ์‹œ์ ์ธ ๊ณผ๋ถ€ํ•˜ ๋˜๋Š” ์˜ˆ์ •๋œ ์ž‘์—…์œผ๋กœ ์ž ์‹œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์Œ
    • Retry-After ํ—ค๋” ํ•„๋“œ๋กœ ์–ผ๋งˆ๋’ค์— ๋ณต๊ตฌ๋˜๋Š”์ง€ ๋ณด๋‚ผ ์ˆ˜๋„ ์žˆ์Œ