์ํ ์ฝ๋
ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ ์์ฒญ์ ์ฒ๋ฆฌ ์ํ๋ฅผ ์๋ต์์ ์๋ ค์ฃผ๋ ๊ธฐ๋ฅ
· 1xx (Informational): ์์ฒญ์ด ์์ ๋์ด ์ฒ๋ฆฌ ์ค
· 2xx (Successfull): ์์ฒญ ์ ์ ์ฒ๋ฆฌ
· 3xx (Redirection): ์์ฒญ์ ์๋ฃํ๋ ค๋ฉด ์ถ๊ฐ ํ๋์ด ํ์
· 4xx (Client Error): ํด๋ผ์ด์ธํธ ์ค๋ฅ, ์๋ชป๋ ๋ฌธ๋ฒ ๋ฑ์ผ๋ก ์๋ฒ๊ฐ ์์ฒญ์ ์ํํ ์ ์์
· 5xx (Server Error): ์๋ฒ ์ค๋ฅ, ์๋ฒ๊ฐ ์ ์ ์์ฒญ์ ์ฒ๋ฆฌํ์ง ๋ชปํจ
๋ง์ฝ ๋ชจ๋ฅด๋ ์ํ ์ฝ๋๊ฐ ๋ํ๋๋ค๋ฉด ํด๋ผ์ด์ธํธ๋ ์์ ์ํ ์ฝ๋๋ก ํด์ํด์ ์ฒ๋ฆฌํ๋ฉด ๋๋ค.
๋ฏธ๋์ ์๋ก์ด ์ํ ์ฝ๋๊ฐ ์ถ๊ฐ๋์ด๋ ํด๋ผ์ด์ธํธ๋ฅผ ๋ณ๊ฒฝํ์ง ์์๋ ๋๋ค.
์) 299 ??? → 2xx (Successful), 451 ??? → 4xx (Client Error), 599 ??? → 5xx (Server Error)
1xx (Informational)์ ๊ฑฐ์ ์ฌ์ฉํ์ง ์์ผ๋ฏ๋ก ์์ธํ ์ค๋ช ์ ์๋ตํ๋ค.
2xx - ์ฑ๊ณต
ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌ
· 200 OK
→ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌ
· 201 Created
→ ์์ฒญ ์ฑ๊ณตํด์ ์๋ก์ด ๋ฆฌ์์ค๊ฐ ์์ฑ๋จ
→ ์) POST ๋ฑ๋ก
· 202 Accepted
→ ์์ฒญ์ด ์ ์๋์์ผ๋ ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋์ง ์์์
→ ๋ฐฐ์น ์ฒ๋ฆฌ ๊ฐ์ ๊ณณ์์ ์ฌ์ฉ
→ ์) ์์ฒญ ์ ์ ํ 1์๊ฐ ๋ค์ ๋ฐฐ์น ํ๋ก์ธ์ค๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํจ
· 204 No Content
→ ์๋ฒ๊ฐ ์์ฒญ์ ์ฑ๊ณต์ ์ผ๋ก ์ํํ์ง๋ง, ์๋ต ํ์ด๋ก๋ ๋ณธ๋ฌธ์ ๋ณด๋ผ ๋ฐ์ดํฐ๊ฐ ์์
→ ์) ๋ฌธ์ ํธ์ง๊ธฐ์์ save ๋ฒํผ
→ save ๋ฒํผ์ ๊ฒฐ๊ณผ๋ก ์๋ฌด ๋ด์ฉ์ด ์์ด๋ ๋๋ค.
→ save ๋ฒํผ์ ๋๋ฌ๋ ๊ฐ์ ํ๋ฉด์ ์ ์งํด์ผ ํ๋ค.
→ ๊ฒฐ๊ณผ ๋ด์ฉ์ด ์์ด๋ 204 ๋ฉ์์ง(2xx)๋ง์ผ๋ก ์ฑ๊ณต์ ์ธ์ํ ์ ์๋ค.
์ด ์ธ์ ๋ ๋ง์ 2xx๋์ ์ํ ์ฝ๋๊ฐ ์์ง๋ง, ์ค๋ฌด์์๋ ๋ชจ๋ ๋ค ์ฌ์ฉํ์ง ์๋๋ค.
200 OK๋ง ์ฌ์ฉํ๋ ๊ณณ๋ ๋ง์ผ๋ฉฐ, 200๊ณผ 201๋ง ์ฌ์ฉํ๋ ์ฌ์ฉํ๋ ๊ณณ๋ ๋ง๋ค.
3xx - ๋ฆฌ๋ค์ด๋ ์
์์ฒญ์ ์๋ฃํ๊ธฐ ์ํด ์ ์ ์์ด์ ํธ์ ์ถ๊ฐ ์กฐ์น ํ์
· 300 Multiple Choices
· 301 Moved Permanently
· 302 Found
· 303 See Other
· 304 Not Modified
· 307 Temporary Redirect
· 308 Permanent Redirec
์น ๋ธ๋ผ์ฐ์ ๋ 3xx ์๋ต์ ๊ฒฐ๊ณผ์ Location ํค๋๊ฐ ์์ผ๋ฉด, Location ์์น๋ก ์๋ ์ด๋ํ๋ค. (๋ฆฌ๋ค์ด๋ ํธ)
์ด๋ฌํ ๋ฆฌ๋ค์ด๋ ์ ์๋ ํฌ๊ฒ 3๊ฐ์ง ์ข ๋ฅ๊ฐ ์๋ค.
๋ฆฌ๋ค์ด๋ ์ ์ข ๋ฅ
· ์๊ตฌ ๋ฆฌ๋ค์ด๋ ์ - ํน์ ๋ฆฌ์์ค์ URI๊ฐ ์๊ตฌ์ ์ผ๋ก ์ด๋
์) /members → /users
์) /event → /new-event
· ์ผ์ ๋ฆฌ๋ค์ด๋ ์ - ์ผ์์ ์ธ ๋ณ๊ฒฝ
· ์ฃผ๋ฌธ ์๋ฃ ํ ์ฃผ๋ฌธ ๋ด์ญ ํ๋ฉด์ผ๋ก ์ด๋
· PRG: Post/Redirect/Get
· ํน์ ๋ฆฌ๋ค์ด๋ ์
· ๊ฒฐ๊ณผ ๋์ ์บ์๋ฅผ ์ฌ์ฉ
์๊ตฌ ๋ฆฌ๋ค์ด๋ ์ [ 301, 308 ]
· ๋ฆฌ์์ค์ URI๊ฐ ์๊ตฌ์ ์ผ๋ก ์ด๋
· ์๋์ URL๋ฅผ ์ฌ์ฉ X, ๊ฒ์ ์์ง ๋ฑ์์๋ ๋ณ๊ฒฝ ์ธ์ง
· 301 Moved Permanently
→ ๋ฆฌ๋ค์ด๋ ํธ์ ์์ฒญ ๋ฉ์๋๊ฐ GET์ผ๋ก ๋ณํ๊ณ , ๋ณธ๋ฌธ์ด ์ ๊ฑฐ๋ ์ ์์(MAY)
· 308 Permanent Redirect
→ 301๊ณผ ๊ธฐ๋ฅ์ ๊ฐ์
→ ๋ฆฌ๋ค์ด๋ ํธ์ ์์ฒญ ๋ฉ์๋์ ๋ณธ๋ฌธ ์ ์ง (์ฒ์ POST๋ฅผ ๋ณด๋ด๋ฉด ๋ฆฌ๋ค์ด๋ ํธ๋ POST ์ ์ง)
์ค๋ฌด์์๋ 308์ ๊ฑฐ์ ์ฌ์ฉํ์ง ์์ผ๋ฉฐ, 301๋ ๋ง์ด ์ฌ์ฉํ์ง๋ ์๋๋ค.
์ค๋ฌด์์๋ ์ผ์์ ์ธ ๋ฆฌ๋ค์ด๋ ์ ์ ๋ง์ด ์ฌ์ฉํ๊ฒ ๋๋ค.
์ผ์์ ์ธ ๋ฆฌ๋ค์ด๋ ์ [ 302, 307, 303 ]
· ๋ฆฌ์์ค์ URI๊ฐ ์ผ์์ ์ผ๋ก ๋ณ๊ฒฝ
· ๋ฐ๋ผ์ ๊ฒ์ ์์ง ๋ฑ์์ URL์ ๋ณ๊ฒฝํ๋ฉด ์ ๋จ
· 302 Found
→ ๋ฆฌ๋ค์ด๋ ํธ ์ ์์ฒญ ๋ฉ์๋๊ฐ GET์ผ๋ก ๋ณํ๊ณ , ๋ณธ๋ฌธ์ด ์ ๊ฑฐ๋ ์ ์์(MAY)
· 307 Temporary Redirect
→ 302์ ๊ธฐ๋ฅ์ ๊ฐ์
→ ๋ฆฌ๋ค์ด๋ ํธ ์ ์์ฒญ ๋ฉ์๋์ ๋ณธ๋ฌธ ์ ์ง(์์ฒญ ๋ฉ์๋๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์๋๋ค. MUST NOT)
· 303 See Other
→ 302์ ๊ธฐ๋ฅ์ ๊ฐ์
→ ๋ฆฌ๋ค์ด๋ ํธ์ ์์ฒญ ๋ฉ์๋๊ฐ GET์ผ๋ก ๋ณ๊ฒฝ
์ฝ๊ฒ ์๊ฐํ๋ฉด 307์ ์์ฒญ ๋ฉ์๋ ์ ์ง 303์ ๋ช ํํ๊ฒ GET์ผ๋ก ๋ณ๊ฒฝ 302๋ ๋๋ถ๋ถ GET์ผ๋ก ๋ณ๊ฒฝ(๋ช ํํ์ง ์์) ํ๋ค.
๊ทธ๋ ๋ค๋ฉด POST๋ก ์ฃผ๋ฌธ ํ์ ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ์๋ก๊ณ ์นจ์ ํ๊ฒ๋๋ฉด ์๋ก๊ณ ์นจ์ ๋ค์ ์์ฒญ์ ํ๋๊ฒ์ด๋ ์ค๋ณต ์ฃผ๋ฌธ์ด ๋ ์ ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ PRG: Post/Redirect/Get์ ์ฌ์ฉํด์ผ ํ๋ค.
PRG: Post/Redirect/Get
· POST๋ก ์ฃผ๋ฌธํ์ ์๋ก ๊ณ ์นจ์ผ๋ก ์ธํ ์ค๋ณต ์ฃผ๋ฌธ ๋ฐฉ์ง
· POST๋ก ์ฃผ๋ฌธํ์ ์ฃผ๋ฌธ ๊ฒฐ๊ณผ ํ๋ฉด์ GET ๋ฉ์๋๋ก ๋ฆฌ๋ค์ด๋ ํธ
· ์๋ก๊ณ ์นจํด๋ ๊ฒฐ๊ณผ ํ๋ฉด์ GET์ผ๋ก ์กฐํ
· ์ค๋ณต ์ฃผ๋ฌธ ๋์ ์ ๊ฒฐ๊ณผ ํ๋ฉด๋ง GET์ผ๋ก ๋ค์ ์์ฒญ
· PRG ์ดํ ๋ฆฌ๋ค์ด๋ ํธ
→ URL์ด ์ด๋ฏธ POST → GET์ผ๋ก ๋ฆฌ๋ค์ด๋ ํธ ๋จ
→ ์๋ก ๊ณ ์นจ ํด๋ GET์ผ๋ก ๊ฒฐ๊ณผ ํ๋ฉด๋ง ์กฐํ
์ฒ์ 302 ์คํ์ ์๋๋ HTTP ๋ฉ์๋๋ฅผ ์ ์งํ๋ ๊ฒ์ด์๋ค.
๊ทธ๋ฐ๋ฐ ์น ๋ธ๋ผ์ฐ์ ๋ค์ด ๋๋ถ๋ถ GET์ผ๋ก ๋ฐ๋์ด ๋ฒ๋ ธ๋ค.(์ผ๋ถ๋ ๋ค๋ฅด๊ฒ ๋์)
๊ทธ๋์ ๋ชจํธํ 302๋ฅผ ๋์ ํ๋ ๋ช ํํ 307, 303์ด ๋ฑ์ฅํ๊ฒ ๋๋ค.(301 ๋์์ผ๋ก 308๋ ๋ฑ์ฅ)
ํ์ง๋ง ์ค๋ฌด์์๋ 307, 303์ ๊ถ์ฅํ์ง๋ง ํ์ค์ ์ผ๋ก ์ด๋ฏธ ๋ง์ ์ ํ๋ฆฌ์ผ์ด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด 302๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฌ์ฉ ์ค์ด๋ค. ์๋ ๋ฆฌ๋ค์ด๋ ์ ์์ GET์ผ๋ก ๋ณํด๋ ๋๋ฉด ๊ทธ๋ฅ 302๋ฅผ ์ฌ์ฉํด๋ ํฐ ๋ฌธ์ ๋ ์๋ค.
๊ธฐํ ๋ฆฌ๋ค์ด๋ ์ [ 300, 304 ]
· 300 Multiple Choices: ์ ์ด๋ค.
· 304 Not Modified
→ ์บ์๋ฅผ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ
→ ํด๋ผ์ด์ธํธ์๊ฒ ๋ฆฌ์์ค๊ฐ ์์ ๋์ง ์์์์ ์๋ ค์ค๋ค. ๋ฐ๋ผ์ ํด๋ผ์ด์ธํธ๋ ๋ก์ปฌPC์
์ ์ฅ๋ ์บ์๋ฅผ ์ฌ์ฌ์ฉํ๋ค. ( ์บ์๋ก ๋ฆฌ๋ค์ด๋ ํธ ํ๋ค. )
→ 304 ์๋ต์ ์๋ต์ ๋ฉ์์ง ๋ฐ๋๋ฅผ ํฌํจํ๋ฉด ์ ๋๋ค. (๋ก์ปฌ ์บ์๋ฅผ ์ฌ์ฉํด์ผ ํ๋ฏ๋ก)
→ ์กฐ๊ฑด๋ถ GET, HEAD ์์ฒญ ์ ์ฌ์ฉ
4xx - ํด๋ผ์ด์ธํธ ์ค๋ฅ
ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์๋ชป๋ ๋ฌธ๋ฒ ๋ฑ์ผ๋ก ์๋ฒ๊ฐ ์์ฒญ์ ์ํํ ์ ์์.( ์ค๋ฅ์ ์์ธ์ด ํด๋ผ์ด์ธํธ์๊ฒ ์์ )
์ค์ํ ์ ์ ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ฏธ ์๋ชป๋ ์์ฒญ, ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ณ ์๊ธฐ ๋๋ฌธ์, ๋๊ฐ์ ์ฌ์๋๊ฐ ์คํจํ๋ค.
400 Bad Request
→ ํด๋ผ์ด์ธํธ๊ฐ ์๋ชป๋ ์์ฒญ์ ํด์ ์๋ฒ๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์์
· ์์ฒญ ๊ตฌ๋ฌธ, ๋ฉ์์ง ๋ฑ๋ฑ ์ค๋ฅ
· ํด๋ผ์ด์ธํธ๋ ์์ฒญ ๋ด์ฉ์ ๋ค์ ๊ฒํ ํ๊ณ , ๋ณด๋ด์ผ ํจ
์) ์์ฒญ ํ๋ผ๋ฏธํฐ๊ฐ ์๋ชป๋๊ฑฐ๋, API ์คํ์ด ๋ง์ง ์์ ๋
401 Unauthorized
→ ํด๋ผ์ด์ธํธ๊ฐ ํด๋น ๋ฆฌ์์ค์ ๋ํ ์ธ์ฆ์ด ํ์ํจ
· ์ธ์ฆ(Authentication) ๋์ง ์์
· 401 ์ค๋ฅ ๋ฐ์ ์ ์๋ต์ WWW-Authenticate ํค๋์ ํจ๊ป ์ธ์ฆ ๋ฐฉ๋ฒ์ ์ค๋ช
· ์ฐธ๊ณ
· ์ธ์ฆ(Authentication): ๋ณธ์ธ์ด ๋๊ตฌ์ธ์ง ํ์ธ, (๋ก๊ทธ์ธ)
· ์ธ๊ฐ(Authorization): ๊ถํ๋ถ์ฌ (ADMIN ๊ถํ์ฒ๋ผ ํน์ ๋ฆฌ์์ค์ ์ ๊ทผํ ์ ์๋ ๊ถํ,
์ธ์ฆ์ด ์์ด์ผ ์ธ๊ธฐ๊ฐ ์์)
· ์ค๋ฅ ๋ฉ์์ง๊ฐ Unauthorized ์ด์ง๋ง ์ธ์ฆ ๋์ง ์์ (์ด๋ฆ์ด ์์ฌ์)
403 Forbidden
→ ์๋ฒ๊ฐ ์์ฒญ์ ์ดํดํ์ง๋ง ์น์ธ์ ๊ฑฐ๋ถํจ
· ์ฃผ๋ก ์ธ์ฆ ์๊ฒฉ ์ฆ๋ช ์ ์์ง๋ง, ์ ๊ทผ ๊ถํ์ด ๋ถ์ถฉ๋ถํ ๊ฒฝ์ฐ
์) ์ด๋๋ฏผ ๋ฑ๊ธ์ด ์๋ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ ํ์ง๋ง, ์ด๋๋ฏผ ๋ฑ๊ธ์ ๋ฆฌ์์ค์ ์ ๊ทผํ๋ ๊ฒฝ์ฐ
404 Not Found
→ ์์ฒญ ๋ฆฌ์์ค๋ฅผ ์ฐพ์ ์ ์์
· ์์ฒญ ๋ฆฌ์์ค๊ฐ ์๋ฒ์ ์์
· ๋๋ ํด๋ผ์ด์ธํธ๊ฐ ๊ถํ์ด ๋ถ์กฑํ ๋ฆฌ์์ค์ ์ ๊ทผํ ๋ ํด๋น ๋ฆฌ์์ค๋ฅผ ์จ๊ธฐ๊ณ ์ถ์ ๋
5xx - ์๋ฒ ์ค๋ฅ
์๋ฒ์ ๋ฌธ์ ๋ก ์ค๋ฅ๊ฐ ๋ฐ์. ์๋ฒ์ ๋ฌธ์ ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ฌ์๋ํ๋ฉด ์ฑ๊ณตํ ์๋ ์๋ค. (๋ณต๊ตฌ๊ฐ ๋๊ฑฐ๋ ๋ฑ๋ฑ)
500 Internal Server Error
→ ์๋ฒ ๋ฌธ์ ๋ก ์ค๋ฅ ๋ฐ์, ์ ๋งคํ๋ฉด 500 ์ค๋ฅ
· ์๋ฒ ๋ด๋ถ ๋ฌธ์ ๋ก ์ค๋ฅ ๋ฐ์
· ์ ๋งคํ๋ฉด 500 ์ค๋ฅ
503 Service Unavailable
→ ์๋น์ค ์ด์ฉ ๋ถ๊ฐ
· ์๋ฒ๊ฐ ์ผ์์ ์ธ ๊ณผ๋ถํ ๋๋ ์์ ๋ ์์ ์ผ๋ก ์ ์ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์์
· Retry-After ํค๋ ํ๋๋ก ์ผ๋ง ๋ค์ ๋ณต๊ตฌ๋๋์ง ๋ณด๋ผ ์๋ ์์
5xx์ ์๋ฌ๋ ์ ๋ง ์๋ฒ์ ๋ฌธ์ ๊ฐ ํฐ์ก์ ๋์ ์ฌ์ฉ์ ํด์ผ ํ๋ค.
์ถ์ฒ: [์ธํ๋ฐ]๋ชจ๋ ๊ฐ๋ฐ์๋ฅผ ์ํ HTTP ์น ๊ธฐ๋ณธ ์ง์
'๐ Web > HTTP ์น ๊ธฐ๋ณธ ์ง์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[HTTP]HTTP ํค๋2 - ์บ์์ ์กฐ๊ฑด๋ถ ์์ฒญ (0) | 2022.10.21 |
---|---|
[HTTP]HTTP ํค๋1 - ์ผ๋ฐ ํค๋ (0) | 2022.10.21 |
[HTTP]HTTP ๋ฉ์๋ (0) | 2022.10.20 |
[HTTP]HTTP ๊ธฐ๋ณธ (0) | 2022.10.19 |
[HTTP]์ธํฐ๋ท ๋คํธ์ํฌ (0) | 2022.10.19 |