yeon's blog

[HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹] HTTP ์ƒํƒœ์ฝ”๋“œ ๋ณธ๋ฌธ

HTTP

[HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹] HTTP ์ƒํƒœ์ฝ”๋“œ

yeonii 2023. 12. 9. 13:01

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

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

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

 


๐ŸŒฑ 2xx - ์„ฑ๊ณต

200 OK

  • ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์—ˆ์Œ์„ ์•Œ๋ฆฌ๋Š” ์ƒํƒœ์ฝ”๋“œ

201 Created

  • POST๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ๋ฆฌ์†Œ์Šค URI๋ฅผ ์„œ๋ฒ„์—์„œ ์ƒ์„ฑํ•˜๋Š” ์ƒํƒœ์ฝ”๋“œ
  • HTTP Header Location์— ์ƒ์„ฑ๋œ ๋ฆฌ์†Œ์Šค์˜ URI ์ž‘์„ฑ

202 Accepted

  • ์š”์ฒญ์ด ์ ‘์ˆ˜ ๋˜์—ˆ์œผ๋‚˜ ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋˜์ง€ ์•Š์€ ์ƒํƒœ์ฝ”๋“œ
  • ์ž˜ ์‚ฌ์šฉํ•˜์ง€ X

204 No Content

  • ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ ํ–ˆ์ง€๋งŒ ์‘๋‹ต ํŽ˜์ด๋กœ๋“œ ๋ณธ๋ฌธ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š” ์ƒํƒœ์ฝ”๋“œ

 


๐ŸŒฑ 3xx - ๋ฆฌ๋‹ค์ด๋ ‰์…˜

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

๐Ÿ‘‰ 300: Multiple Choices
    301: Moved Permanently
    302: Found
    303: See Other
    304: Not Modified
    307: Temporary Redirect
    308: Permanent Redirect

 

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

 

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

  1. ์˜๊ตฌ ๋ฆฌ๋‹ค์ด๋ ‰์…˜: ํŠน์ • ๋ฆฌ์†Œ์Šค์˜ URI๊ฐ€ ์˜๊ตฌ์ ์œผ๋กœ ์ด๋™
    • /members โžก๏ธ /users
    • /event โžก๏ธ /new-event
  2. ์ผ์‹œ ๋ฆฌ๋‹ค์ด๋ ‰์…˜: ์ผ์‹œ์ ์ธ ๋ณ€๊ฒฝ
    • RPG: Post/Redirect/Get
  3. ํŠน์ˆ˜ ๋ฆฌ๋‹ค์ด๋ ‰์…˜: ๊ฒฐ๊ณผ ๋Œ€์‹  ์บ์‹œ ์‚ฌ์šฉ

 

์˜๊ตฌ ๋ฆฌ๋‹ค์ด๋ ‰์…˜

  • ๋ฆฌ์†Œ์Šค์˜ URI๊ฐ€ ์˜๊ตฌ์ ์œผ๋กœ ์ด๋™
  • ์›๋ž˜์˜ URI ์‚ฌ์šฉ X, ๊ฒ€์ƒ‰ ์—”์ง„ ๋“ฑ์—์„œ๋„ ๋ณ€๊ฒฝ ์ธ์ง€
  • ์˜ˆ) /members -> /users, /event -> /new-event

301 Moved Permanently

  • ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ์‹œ ์š”์ฒญ ๋ฉ”์„œ๋“œ๊ฐ€ GET์œผ๋กœ ๋ณ€ํ•˜๊ณ , ๋ณธ๋ฌธ์ด ์ œ๊ฑฐ๋  ์ˆ˜ ์žˆ์Œ

308 Permanent Redirect

  • 301๊ณผ ๊ธฐ๋Šฅ์€ ๊ฐ™์Œ
  • ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ์‹œ ์š”์ฒญ ๋ฉ”์„œ๋“œ์™€ ๋ณธ๋ฌธ ์œ ์ง€

 

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

  • ๋ฆฌ์†Œ์Šค์˜ URI๊ฐ€ ์ผ์‹œ์ ์œผ๋กœ ๋ณ€๊ฒฝ
  • ๋”ฐ๋ผ์„œ ๊ฒ€์ƒ‰ ์—”์ง„ ๋“ฑ์—์„œ URL์„ ๋ณ€๊ฒฝํ•˜๋ฉด ์•ˆ๋จ
  • PRG(Post/Redirect/Get)

302 Found

  • ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ์‹œ ์š”์ฒญ ๋ฉ”์„œ๋“œ๊ฐ€ GET์œผ๋กœ ๋ณ€ํ•˜๊ณ , ๋ณธ๋ฌธ์ด ์ œ๊ฑฐ๋  ์ˆ˜ ์žˆ์Œ

307 Temporary Redirect

  • 302์™€ ๊ธฐ๋Šฅ์€ ๊ฐ™์Œ
  • ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ์‹œ ์š”์ฒญ ๋ฉ”์„œ๋“œ์™€ ๋ณธ๋ฌธ ์œ ์ง€(์š”์ฒญ ๋ฉ”์„œ๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ์•ˆ๋จ)

303 See Other

  • 302์™€ ๊ธฐ๋Šฅ์€ ๊ฐ™์Œ
  • ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ์‹œ ์š”์ฒญ ๋ฉ”์„œ๋“œ๊ฐ€ GET์œผ๋กœ ๋ณ€๊ฒฝ

PRG (Post/Redirect/Get)

์˜ˆ์‹œ - POST๋กœ ์ฃผ๋ฌธ ํ›„์— ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•˜๋ฉด?

            → ์ƒˆ๋กœ๊ณ ์นจ์€ ๋‹ค์‹œ ์š”์ฒญ

            → ์ค‘๋ณต ์ฃผ๋ฌธ์ด ๋  ์ˆ˜ ์žˆ์Œ

  • POST๋กœ ์ฃผ๋ฌธ ํ›„์— ์ƒˆ๋กœ ๊ณ ์นจ์œผ๋กœ ์ธํ•œ ์ค‘๋ณต ์ฃผ๋ฌธ ๋ฐฉ์ง€
  • POST๋กœ ์ฃผ๋ฌธ ํ›„์— ์ฃผ๋ฌธ ๊ฒฐ๊ณผ ํ™”๋ฉด์„ GET ๋ฉ”์„œ๋“œ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ
  • ์ƒˆ๋กœ๊ณ ์นจํ•ด๋„ ๊ฒฐ๊ณผ ํ™”๋ฉด์„ GET์œผ๋กœ ์กฐํšŒ
  • ์ค‘๋ณต ์ฃผ๋ฌธ ๋Œ€์‹ ์— ๊ฒฐ๊ณผ ํ™”๋ฉด๋งŒ GET์œผ๋กœ ๋‹ค์‹œ ์š”์ฒญ

 

  1. RPG ์‚ฌ์šฉ ์ „

2. RPG ์‚ฌ์šฉ ํ›„

 

 

302, 307, 303 ๊ทธ๋ž˜์„œ ๋ญ˜ ์จ์•ผ ํ•˜๋‚˜์š”?

 ๐Ÿ‘‰ 302 Found: Get์œผ๋กœ ๋ณ€ํ•  ์ˆ˜ ์žˆ์Œ
      307 Temporary Redirect: ๋ฉ”์„œ๋“œ๊ฐ€ ๋ณ€ํ•˜๋ฉด ์•ˆ๋จ
      303 See Other: GET์œผ๋กœ ๋ณ€๊ฒฝํ•จ

 

ํŠน์ˆ˜ ๋ฆฌ๋‹ค์ด๋ ‰์…˜

300 Multiple Choice

304 Not Modified

 


๐ŸŒฑ 4xx - ํด๋ผ์ด์–ธํŠธ ์˜ค๋ฅ˜

4xx (Client Error)

  • ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ์ž˜๋ชป๋œ ๋ฌธ๋ฒ• ๋“ฑ์œผ๋กœ ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ์ฝ”๋“œ
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ž˜๋ชป๋œ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์žˆ๋Š” ๊ฒƒ.

400 Bad Request

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ž˜๋ชป๋œ ์š”์ฒญ์„ ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋Š” ์ƒํƒœ์ฝ”๋“œ
  • ์š”์ฒญ ๊ตฌ๋ฌธ, ๋ฉ”์‹œ์ง€ ๋“ฑ์˜ ์˜ค๋ฅ˜ → ์š”์ฒญ ๋‚ด์šฉ ๊ฒ€ํ†  ํ•„์š”

401 Unauthorized

  • ํด๋ผ์ด์–ธํŠธ๋Š” ํ•ด๋‹น ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ธ์ฆ ํ•„์š”๋ฅผ ์•Œ๋ฆฌ๋Š” ์ƒํƒœ์ฝ”๋“œ
๐Ÿ‘‰ ์ธ์ฆ(Authentication): ๋ณธ์ธ์ด ๋ˆ„๊ตฌ์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •
     ์ธ๊ฐ€(Authorization): ํŠน์ • ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์žˆ๋Š” ์‚ฌ๋žŒ๋งŒ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ

403 Forbidden

  • ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ดํ•ดํ–ˆ์ง€๋งŒ ๊ถŒํ•œ์œผ๋กœ ์ธํ•ด ๊ฑฐ๋ถ€ํ•˜๋Š” ์ƒํƒœ์ฝ”๋“œ
  • ex) ์ธ์ฆ ์ž๊ฒฉ ์ฆ๋ช…์€ ์žˆ์ง€๋งŒ ์ ‘๊ทผ ๊ถŒํ•œ์ด ์—†๋Š” ๊ฒฝ์šฐ, ์–ด๋“œ๋ฏผ ๋“ฑ๊ธ‰์ด ์•„๋‹Œ ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค๋ฅธ ๋ฆฌ์†Œ์Šค๋กœ ๋กœ๊ทธ์ธ์€ ํ–ˆ์ง€๋งŒ ์–ด๋“œ๋ฏผ ๋“ฑ๊ธ‰์˜ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๋Š” ๊ฒฝ์šฐ ๋“ฑ

404 Not Found

  • ์š”์ฒญ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ์ƒํƒœ์ฝ”๋“œ

๐ŸŒฑ 5xx - ์„œ๋ฒ„ ์˜ค๋ฅ˜

5xx (Server Error)

  • ์„œ๋ฒ„ ๋ฌธ์ œ๋กœ ์˜ค๋ฅ˜ ๋ฐœ์ƒ
  • ์„œ๋ฒ„์— ๋ฌธ์ œ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์žฌ์‹œ๋„ ํ•˜๋ฉด ๋ณต๊ตฌํ•˜๊ฑฐ๋‚˜ ์„ฑ๊ณตํ•  ์ˆ˜ ์žˆ์Œ

500 Internal Server Error

  • ์„œ๋ฒ„ ๋‚ด๋ถ€ ๋ฌธ์ œ๋กœ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ์ƒํƒœ์ฝ”๋“œ

503 Service Unvailable

  • ์„œ๋ฒ„๊ฐ€ ์ผ์‹œ์ ์œผ๋กœ ๊ณผ๋ถ€ํ•˜๊ฐ€ ๋˜๊ฑฐ๋‚˜ ์˜ˆ์ •๋œ ์ž‘์—…์œผ๋กœ ์ž ์‹œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์ƒํƒœ์ฝ”๋“œ
  • Retry-After ํ—ค๋”๋กœ ์–ผ๋งˆ ๋’ค์— ๋ณต๊ตฌ๋˜๋Š”์ง€ ์˜ˆ์ƒ ์‹œ๊ฐ„์„ ๋ณผ ์ˆ˜ ์žˆ์Œ