HTTP ์‘๋‹ต

2025. 6. 24. 23:14ใ†๋„คํŠธ์›Œํฌ

๋ฐ˜์‘ํ˜•

๐Ÿ“ฆ HTTP ์‘๋‹ต ๊ตฌ์กฐ

HTTP/1.1 200 OK          ← โœ… [1. ์ƒํƒœ ์ฝ”๋“œ (Status)]
Content-Type: text/html  ← โœ… [2. ํ—ค๋” (Headers)]
Content-Length: 123

<html>...</html>         ← โœ… [3. ๋ณธ๋ฌธ (Body)]

โœ… 1. ์ƒํƒœ ์ฝ”๋“œ (Status Code)

HTTP ์‘๋‹ต์˜ ์ƒํƒœ๋ฅผ 3์ž๋ฆฌ ์ˆซ์ž๋กœ ํ‘œํ˜„ํ•˜๋ฉฐ, 5๊ฐ€์ง€ ๋ฒ”์ฃผ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค:

๋ฒ”์ฃผ์ฝ”๋“œ์˜๋ฏธ
1xx 100~199 ์ฒ˜๋ฆฌ ์ค‘ (์ •๋ณด ์ œ๊ณต)
2xx 200~299 ์„ฑ๊ณต
3xx 300~399 ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ
4xx 400~499 ํด๋ผ์ด์–ธํŠธ ์˜ค๋ฅ˜
5xx 500~599 ์„œ๋ฒ„ ์˜ค๋ฅ˜

 


๐Ÿ“Œ ์ž์ฃผ ์“ฐ๋Š” ์ƒํƒœ ์ฝ”๋“œ

์ƒํƒœ ์ฝ”๋“œ์˜๋ฏธ์„ค๋ช…
200 OK ์„ฑ๊ณต ์ผ๋ฐ˜์ ์ธ ์„ฑ๊ณต
201 Created ์ƒ์„ฑ๋จ POST ์š”์ฒญ์œผ๋กœ ์ž์›์ด ์ƒ์„ฑ๋จ
204 No Content ๋ณธ๋ฌธ ์—†์Œ ์‘๋‹ต ๋ณธ๋ฌธ์ด ์—†์Œ
301 Moved Permanently ์˜๊ตฌ ์ด๋™ URL์ด ๋ฐ”๋€œ
302 Found ์ž„์‹œ ์ด๋™ ๋‹ค๋ฅธ URL๋กœ ์ž„์‹œ ์ด๋™
400 Bad Request ์ž˜๋ชป๋œ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ, ๋ฌธ๋ฒ• ์˜ค๋ฅ˜ ๋“ฑ
401 Unauthorized ์ธ์ฆ ํ•„์š” ํ† ํฐ ๋ˆ„๋ฝ ๋“ฑ
403 Forbidden ์ ‘๊ทผ ๊ธˆ์ง€ ๊ถŒํ•œ ๋ถ€์กฑ
404 Not Found ์ฐพ์„ ์ˆ˜ ์—†์Œ URL ๋Œ€์ƒ์ด ์กด์žฌํ•˜์ง€ ์•Š์Œ
409 Conflict ์ถฉ๋Œ ์ค‘๋ณต๋œ ๋ฆฌ์†Œ์Šค ๋“ฑ
500 Internal Server Error ์„œ๋ฒ„ ์˜ค๋ฅ˜ ์˜ˆ์™ธ ๋ฐœ์ƒ ๋“ฑ
503 Service Unavailable ์„œ๋น„์Šค ๋ถˆ๊ฐ€ ์„œ๋ฒ„ ๊ณผ๋ถ€ํ•˜ ๋“ฑ
 

โœ… 2. ํ—ค๋” (Headers)

ํ—ค๋”๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ๋ณธ๋ฌธ์˜ ํ˜•์‹, ๊ธธ์ด, ์บ์‹œ, ์ฟ ํ‚ค ๋“ฑ์— ๋Œ€ํ•œ ์ •๋ณด ์ œ๊ณต ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“Œ ๋Œ€ํ‘œ์ ์ธ HTTP ์‘๋‹ต ํ—ค๋”

 

ํ—ค๋”์˜๋ฏธ์˜ˆ์‹œ
Content-Type ์‘๋‹ต ๋ณธ๋ฌธ์˜ ๋ฐ์ดํ„ฐ ํ˜•์‹ application/json, text/html
Content-Length ์‘๋‹ต ๋ฐ”๋””์˜ ๊ธธ์ด (byte) 342
Set-Cookie ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ฟ ํ‚ค ์„ค์ • ์ง€์‹œ Set-Cookie: token=abc123
Cache-Control ์บ์‹ฑ ์ •์ฑ… no-cache, max-age=3600
Location ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ๋Œ€์ƒ ์œ„์น˜ Location: /new-url
WWW-Authenticate ์ธ์ฆ ํ•„์š” ์‹œ ์‚ฌ์šฉ Bearer realm="example"
Access-Control-Allow-Origin CORS ํ—ˆ์šฉ ๋„๋ฉ”์ธ * ๋˜๋Š” https://domain.com
 

โœ… 3. ๋ณธ๋ฌธ (Body)

์‘๋‹ต ๋ณธ๋ฌธ์€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌํ•  ์‹ค์ œ ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.

ํ˜•์‹์€ Content-Type์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋ฉฐ, ๋Œ€ํ‘œ์ ์œผ๋กœ:

Content-Type                                        ์„ค๋ช…                                   ์˜ˆ์‹œ

application/json JSON ๋ฐ์ดํ„ฐ { "name": "ํ™๊ธธ๋™" }
text/html HTML ์›นํŽ˜์ด์ง€ <html>...</html>
text/plain ์ผ๋ฐ˜ ํ…์ŠคํŠธ ๋กœ๊ทธ์ธ ์‹คํŒจ
application/xml XML ๋ฐ์ดํ„ฐ <user><name>ํ™๊ธธ๋™</name></user>
application/octet-stream ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ ์ด๋ฏธ์ง€, PDF ๋“ฑ

๐Ÿ“Œ ์‹ค์ „ ์˜ˆ์‹œ

HTTP/1.1 403 Forbidden
Content-Type: application/json
Content-Length: 42

{
  "message": "๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค"
}

 


โœ… Spring์—์„œ์˜ ํ‘œํ˜„ (ResponseEntity ์˜ˆ์‹œ)

return ResponseEntity
    .status(403)
    .header("X-Custom-Header", "value")
    .body(Map.of("message", "๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค"));

 

 

๐Ÿ” ์š”์•ฝ ์ •๋ฆฌ

๊ตฌ์„ฑ ์š”์†Œ์—ญํ• ์˜ˆ์‹œ
์ƒํƒœ ์ฝ”๋“œ (Status) ์„ฑ๊ณต/์‹คํŒจ ์ •๋ณด 200, 404, 500 ๋“ฑ
ํ—ค๋” (Headers) ๋ณธ๋ฌธ ์„ค๋ช…, ์ฟ ํ‚ค, ์บ์‹œ ๋“ฑ Content-Type, Set-Cookie ๋“ฑ
๋ณธ๋ฌธ (Body) ์‹ค์ œ ์‘๋‹ต ๋ฐ์ดํ„ฐ JSON, HTML, ํ…์ŠคํŠธ ๋“ฑ
๋ฐ˜์‘ํ˜•

'๋„คํŠธ์›Œํฌ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

HTTP ์š”์ฒญ  (0) 2025.06.24