HTTP ํ”„๋กœํ† ์ฝœ

kirin.logยท2021๋…„ 2์›” 3์ผ
2

๐Ÿš€ HTTP ํ†ต์‹ ๊ทœ์•ฝ

HyperText Transter Protocol

  • HyperText โžก HTML, ์ฆ‰ ๋งˆํฌ์—… ์–ธ์–ด๋กœ ๊ตฌ์„ฑ๋œ ๋ฌธ์„œ์™€ ๋ฌธ์„œ๊ฐ€ ๋งํฌ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Œ์„ ๋œปํ•จ
  • Transfer โžก HTML๋กœ ๋งŒ๋“  ์›นํŽ˜์ด์ง€ ๋ฌธ์„œ(ํŒŒ์ผ)๋ฅผ ๋ณด๋‚ธ๋‹ค
  • Protocol โžก ์ปดํ“จํ„ฐ๋ผ๋ฆฌ ์–ด๋–ป๊ฒŒ htmlํŒŒ์ผ์„ ์ฃผ๊ณ  ๋ฐ›์„์ง€์— ๋Œ€ํ•œ ์†Œํ†ต๋ฐฉ์‹ ๋˜๋Š” ์•ฝ์†

โ— ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ์„œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ(Request & Response), HTTP ๊ทœ์•ฝ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์†Œํ†ตํ•  ์ˆ˜ ์žˆ๋‹ค.(์†Œํ†ต๋ฐฉ์‹, ์•ฝ์†)

๐Ÿˆ http vs https

http (HyperText Tranfer Protocol)
์ธํ„ฐ๋„ท์—์„œ ์›น ์„œ๋ฒ„์™€ ์‚ฌ์šฉ์ž ์ปดํ“จํ„ฐ์— ์„ค์น˜๋œ ์›น ๋ธŒ๋ผ์šฐ์ € ์‚ฌ์ด์— ๋ฌธ์„œ๋ฅผ ์ „์†กํ•˜๊ธฐ ์œ„ํ•œ ํ†ต์‹  ๊ทœ์•ฝ์ด๋‹ค.
http ์„œ๋ฒ„๋Š” ๊ธฐ๋ณธ ํฌํŠธ์ธ 80๋ฒˆ ํฌํŠธ์—์„œ ์„œ๋น„์Šค ๋Œ€๊ธฐ ์ค‘์ด๊ณ  ํด๋ผ์ด์–ธํŠธ(์›น ๋ธŒ๋ผ์šฐ์ €)๊ฐ€ TCP 80 ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ์—ฐ๊ฒฐํ•˜๋ฉด ์„œ๋ฒ„๋Š” ์š”์ฒญํ•ด ์‘๋‹ตํ•˜๋ฉด์„œ ์ž๋ฃŒ(์ •๋ณด)๋ฅผ ์ „์†กํ•œ๋‹ค.
์•”ํ˜ธํ™” ๋˜์ง€ ์•Š์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ฃผ๊ณ  ๋ฐ›๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ์ฒญํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์‰ฝ๋‹ค.

HTTP๋Š” TCP/IP ์œ„์—์„œ ์ž‘๋™ํ•œ๋‹ค. HTTP๋Š” ์ƒํƒœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๋Š” Stateless ํ”„๋กœํ† ์ฝœ์ด๋ฉฐ Method, Path, Version, Headers, Body ๋“ฑ์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.


https (HyperText Transfer Protocol over Secure Socket Layer)
http์™€ ๊ฑฐ์˜ ์œ ์‚ฌํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ณผ์ •์— ๋ณด์•ˆ ์š”์†Œ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์ด ์ฐจ์ด์ ์ด๋‹ค.
https๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด์˜ ๋ชจ๋“  ํ†ต์‹  ๋‚ด์šฉ์ด ์•”ํ˜ธํ™”๋œ๋‹ค.

HTTPS๋Š” HTTP์— ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™”๊ฐ€ ์ถ”๊ฐ€๋œ ํ”„๋กœํ† ์ฝœ์ด๋‹ค. HTTPS๋Š” HTTP์™€ ๋‹ค๋ฅด๊ฒŒ 443๋ฒˆ ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์ค‘๊ฐ„์— ์ œ3์ž๊ฐ€ ์ •๋ณด๋ฅผ ๋ณผ ์ˆ˜ ์—†๋„๋ก ๊ณต๊ฐœํ‚ค ์•”ํ˜ธํ™”๋ฅผ ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค.

[ ๊ณต๊ฐœํ‚ค/๊ฐœ์ธํ‚ค ]
HTTPS๋Š” ๊ณต๊ฐœํ‚ค/๊ฐœ์ธํ‚ค ์•”ํ˜ธํ™” ๋ฐฉ์‹์„ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์•”ํ˜ธํ™”ํ•˜๊ณ  ์žˆ๋‹ค. ๊ณต๊ฐœํ‚ค์™€ ๊ฐœ์ธํ‚ค๋Š” ์„œ๋กœ๋ฅผ ์œ„ํ•œ 1์Œ์˜ ํ‚ค์ด๋‹ค.

  • ๊ณต๊ฐœํ‚ค: ๋ชจ๋‘์—๊ฒŒ ๊ณต๊ฐœ๊ฐ€๋Šฅํ•œ ํ‚ค
  • ๊ฐœ์ธํ‚ค: ๋‚˜๋งŒ ๊ฐ€์ง€๊ณ  ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•˜๋Š” ํ‚ค

๊ณต๊ฐœํ‚ค์™€ ๊ฐœ์ธํ‚ค๋กœ ์•”ํ˜ธํ™”ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
๊ณต๊ฐœํ‚ค ์•”ํ˜ธํ™”: ๊ณต๊ฐœํ‚ค๋กœ ์•”ํ˜ธํ™”๋ฅผ ํ•˜๋ฉด ๊ฐœ์ธํ‚ค๋กœ๋งŒ ๋ณตํ˜ธํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค. ๐Ÿ‘‰ ๊ฐœ์ธํ‚ค๋Š” ๋‚˜๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฏ€๋กœ, ๋‚˜๋งŒ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
๊ฐœ์ธํ‚ค ์•”ํ˜ธํ™”: ๊ฐœ์ธํ‚ค๋กœ ์•”ํ˜ธํ™”ํ•˜๋ฉด ๊ณต๊ฐœํ‚ค๋กœ๋งŒ ๋ณตํ˜ธํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค. ๐Ÿ‘‰ ๊ณต๊ฐœํ‚ค๋Š” ๋ชจ๋‘์—๊ฒŒ ๊ณต๊ฐœ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ๋‚ด๊ฐ€ ์ธ์ฆํ•œ ์ •๋ณด์ž„์„ ์•Œ๋ ค ์‹ ๋ขฐ์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฐœ์ธ ์ •๋ณด์™€ ๊ฐ™์€ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์•„์•ผ ํ•œ๋‹ค๋ฉด HTTPS๋ฅผ ์ด์šฉํ•ด์•ผ ํ•˜์ง€๋งŒ, ๋‹จ์ˆœํ•œ ์ •๋ณด ์กฐํšŒ ๋“ฑ๋งŒ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ๋‹ค๋ฉด HTTP๋ฅผ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค.


โœ… HTTP์˜ 2๊ฐ€์ง€ ํŠน์ง•

(1) Request / Response (Front ์š”์ฒญ/ Back ์‘๋‹ต)

  • ์†Œํ†ต์˜ ํ•ต์‹ฌ์€ ์š”์ฒญ๊ณผ ์‘๋‹ต (๊ทธ์ € ๋ฉ”์‹œ์ง€์— ๋ถˆ๊ณผ)

(2) Stateless (์ƒํƒœ๊ฐ€ ์—†์Œ)

  • HTTP ํ†ต์‹ (์š”์ฒญ/์‘๋‹ต)์€ ๊ณผ๊ฑฐ์˜ HTTPํ†ต์‹ ์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ์ „ํ˜€ ์•Œ์ง€ ๋ชปํ•จ
    โ— ๋งค ํ†ต์‹ ๋งˆ๋‹ค ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ๋‹ด์•„์„œ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค(์ผํšŒ์„ฑ)

ex) ์ฒซ ๋ฒˆ์งธ ํ†ต์‹ ์— ๋Œ€ํ•œ ์ •๋ณด(๋กœ๊ทธ์ธ)๊ฐ€ ๋‚จ์•„์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ํ”„๋ก ํŠธ์—์„œ ๋‘ ๋ฒˆ์งธ ํ†ต์‹ ์„ ๋ณด๋‚ผ ๋•Œ(๋™์˜์ƒ ์‹œ์ฒญ), ์ฒซ ๋ฒˆ์งธ ํ†ต์‹ ์— ๋Œ€ํ•œ ์ •๋ณด๋„ ๋‹ค์‹œ ๋ณด๋‚ด์•ผ ํ•œ๋‹ค.

(ํšŒ์›๋งŒ ๋™์˜์ƒ์„ ์‹œ์ฒญํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋กœ๊ทธ์ธ ์ •๋ณด ํ•„์š” - front๊ฐ€ ํ† ํฐ ์ •๋ณด ํ•จ๊ป˜ ๋ณด๋‚ด์คŒ)
โžก ๊ณ ์œ ํ•œToken์„ ์ด์šฉํ•˜์—ฌ ๊ณ„์† ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๊ธฐ์–ตํ•  ์ˆ˜ ์žˆ๋‹ค.


๐Ÿš— Request ๋ฉ”์‹œ์ง€ ๊ตฌ์กฐ


๐Ÿ‘‰ Start Line

  • POST : HTTP ๋ฉ”์†Œ๋“œ โœจโœจโœจ
    โžก body์— ๋‹ด์•„๋ณด๋‚ด๋Š” ์ •๋ณด๊ฐ€ ๋ฐฑ์—”๋“œ์—์„œ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ• ์ง€ ๋ช…์‹œํ•˜๋Š” ๋ฉ”์†Œ๋“œ
  • user/login : ์–ด๋””๋กœ ๋ณด๋‚ผ์ง€์— ๋Œ€ํ•œ ์ฃผ์†Œ(๋ฐฑ์—”๋“œ์—์„œ ์ •ํ•ด๋†“์Œ)
  • HTTP/1.1 : HTTP ๋ฒ„์ „ ์ •๋ณด

๐Ÿ‘‰ Headers (๊ฐ์ฒด๋กœ ๊ตฌ์„ฑ )

  • Host : ์–ด๋””์„œ ๋ณด๋‚ด๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค
  • Content : body์— ์–ด๋–ค ์ •๋ณด๋ฅผ ๋‹ด์„์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค

๐Ÿ‘‰ Body (๊ฐ์ฒด๋กœ ๊ตฌ์„ฑ )
request ํ•  ๋•Œ, ์–ด๋–ค ์ •๋ณด๋ฅผ ๋‹ด์„์ง€์— ๋Œ€ํ•œ ๋‚ด์šฉ

๐Ÿง HTTP Request Methods
GET
โžก body์— ๋‹ด์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฐฑ์—”๋“œ์—๊ฒŒ ๋ฐ์ดํ„ฐ๊ฐ’์„ (ํ”„๋ก ํŠธ๋กœ) ๋ณด๋‚ด๋‹ฌ๋ผ๋Š” ์˜๋ฏธ
โžก ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๊ธฐ๋งŒ ํ•  ๋•Œ ์‚ฌ์šฉ
โžก ์›นํŽ˜์ด์ง€์— ์ ‘์†ํ•ด์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ (ex.๋กœ๊ทธ์ธ ์š”์ฒญ)
โ— ๋กœ๊ทธ์ธ ์š”์ฒญํ•  ๋•Œ, ํ† ํฐ๋„ ํ•จ๊ป˜ ๋ณด๋‚ธ๋‹ค

POST
โžก body์— ๋‹ด์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ (๋ฐฑ์—”๋“œ์—๊ฒŒ) ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•ด๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•˜๋Š” ์˜๋ฏธ
โžก ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑ / ์ˆ˜์ • ํ•  ๋•Œ ์‚ฌ์šฉ
โžก Body์— ๋‹ด๋Š” ๋‚ด์šฉ์ด ํ•ต์‹ฌ! (ex.์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‹ด๊ธฐ ์š”์ฒญ)
โ— client๊ฐ€ ํ•„์š”ํ•œ ๋‚ด์šฉ์„ body์— ๋‹ด์•„์„œ server์— ๋ณด๋‚ธ๋‹ค

DELETE
โžก ์„œ๋ฒ„์— ์ €์žฅ๋œ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•  ๋•Œ ์‚ฌ์šฉ

๐Ÿš— Response ๋ฉ”์‹œ์ง€ ๊ตฌ์กฐ


๐Ÿ‘‰ Start Line (์‘๋‹ต ์ƒํƒœ line - 200 OK๋Š” ์š”์ฒญ์ด ์ž˜ ์ฒ˜๋ฆฌ๋˜์—ˆ๋‹ค๋Š” ๋œป)

  • HTTP/1.1 : HTTP ๋ฒ„์ „ ์ •๋ณด
  • 200 : ์š”์ฒญ(Request)์„ ์ž˜ ์ฒ˜๋ฆฌํ–ˆ์„ ๋•Œ
  • OK : status message (Status Code์— ๋Œ€ํ•ด ๊ฒฐ๊ณผ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฉ”์‹œ์ง€)

๐Ÿ‘‰ Headers

  • Host : ์–ด๋–ค ์ปดํ“จํ„ฐ๊ฐ€ ๋ณด๋ƒˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ฃผ์†Œ
  • Server : ์„œ๋ฒ„์˜ ์ฃผ์†Œ
  • Content-Type : body์— ๋Œ€ํ•œ ์ฝ˜ํ…์ธ  ํƒ€์ž…
  • Content-Length : body์— ๋Œ€ํ•œ ์ฝ˜ํ…์ธ  ๊ธธ์ด

๐Ÿ‘‰ Body
์ œ๋Œ€๋กœ ์ „๋‹ฌ๋˜์—ˆ์„ ๋•Œ, SUCCESS ๋“ฑ์˜ ๋ฉ”์‹œ์ง€๊ฐ€ return
token(์„œ๋ฒ„์—์„œ ๋ฐœ๊ธ‰ํ•œ ํ† ํฐ, ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์ธ์‹ํ‘œ์™€ ๊ฐ™์€ ์—ญํ• )์— ๋Œ€ํ•œ ๋‚ด์šฉ ์ „๋‹ฌ
โžก ์ธ์ฆ&์ธ๊ฐ€์™€ ๊ด€๋ จ๋œ ๋‚ด์šฉ ํฌํ•จ

๐Ÿง Status Code
200 โžก ์š”์ฒญ(Request)์„ ์ž˜ ์ฒ˜๋ฆฌํ–ˆ์„ ๋•Œ return
201 โžก ์š”์ฒญ(Request)ํ•  ๋•Œ body์— ๋‹ด๊ธด ๋‚ด์šฉ์ด server์— ์ž˜ ์ €์žฅ๋˜์„ ๋•Œ return

๐Ÿช Client์ธก error
400 โžก ์š”์ฒญ์ด ์ž˜๋ชป๋˜์—ˆ์„ ๋•Œ(client์ธก์—์„œ ์ž˜๋ชป๋œ ์ •๋ณด(์ž…๋ ฅ)๋กœ ์š”์ฒญ์„ ํ–ˆ์„ ๋•Œ) return (Bad Request)
401 โžก ์š”์ฒญ(Request)์— ๋Œ€ํ•ด ๊ถŒํ•œ์ด ์—†์–ด์„œ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ–ˆ์„ ๋•Œ return (Unauthorized)
ex. ํšŒ์›์ด ์•„๋‹Œ ์‚ฌ๋žŒ์ด ๋กœ๊ทธ์ธ์„ ์‹œ๋„ํ–ˆ์„ ๋•Œ
403 โžก ์š”์ฒญ(Request)์— ๋Œ€ํ•ด ๊ถŒํ•œ์ด ์—†์–ด์„œ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ–ˆ์„ ๋•Œ return (Forbidden)
ex. ๋‚ฎ์€ ๋“ฑ๊ธ‰์„ ๊ฐ€์ง„ user๊ฐ€ ๋†’์€ ๋“ฑ๊ธ‰์˜ user๋งŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค์— ์ ‘๊ทผํ•  ๋•Œ
(error๋ฉ”์‹œ์ง€๋Š” ๋ฐฑ์—”๋“œ์—์„œ ์ง€์ •ํ•œ๋‹ค. ์ ‘๊ทผ ๊ถŒํ•œ์— ๋Œ€ํ•ด ๋ง‰๋Š”๋‹ค)
404 โžก ์š”์ฒญ(Request)์— ๋Œ€ํ•ด ์„œ๋ฒ„์—์„œ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๋ฐ์ดํ„ฐ์ผ ๋•Œ return (Not Found)
ex. ์ฃผ์†Œ๋ฅผ ์ž˜๋ชป ์ž…๋ ฅ ํ–ˆ์„ ๋•Œ

๐Ÿช Server์ธก error
500 โžก ์„œ๋ฒ„์ธก์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ์„ ๋•Œ

profile
boma91@gmail.com

1๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2021๋…„ 2์›” 6์ผ

์šฐ์™€์•„...์ƒˆ๋ด„๋‹˜ ํ›จ์”ฌ ๊น”๋”ํ•˜๊ณ  ์ž์„ธํ•˜๊ฒŒ ์ •๋ฆฌ ์ž˜ํ•˜์…จ๋Š”๋ฐ์š”?๐Ÿ‘๐Ÿ‘

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ