TIL 15 HTTP

CastleQยท2021๋…„ 5์›” 24์ผ
0
post-thumbnail

HTTP๋ž€?

HyperText Transfer Protocol์˜ ์•ฝ์ž์ด๋‹ค

1. HyperText

๋ฌธ์„œ์™€ ๋ฌธ์„œ๊ฐ€ ๋งํฌ๋กœ ์—ฐ๊ฒฐ๋˜๋„๋ก ํ•˜๋Š” ํƒœ๊ทธ๋กœ ๊ตฌ์„ฑ๋œ ์–ธ์–ด. ์›นํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด
์›น ๋ธŒ๋ผ์šฐ์ € ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ์–ธ์–ด๋ฅผ ๋œปํ•œ๋‹ค.

2. Transfer

์‚ฌ์ ์ ์˜๋ฏธ๋กœ "์ „์†กํ•˜๋‹ค"๋ผ๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„๋‹ค.
์šฐ๋ฆฌ๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ์›น์‚ฌ์ดํŠธ๋ฅผ ๋„๋ฆฌ ์•Œ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๊ณผ ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์—๊ฒŒ ์ „์†กํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ „์†ก์€ ๋ณด๋‚ด๋Š” ์ฃผ์ฒด์™€ ๋ฐ›๋Š” ์ฃผ์ฒด๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ํฐ ํŠน์ง•์ด๋‹ค.

3. Protocol

ํ”„๋กœํ† ์ฝœ์€ ํ˜‘์•ฝ,ํ†ต์‹  ๊ทœ์•ฝ ์ด๋ผ๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„๋‹ค. ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋–จ์–ด์ง„ ์ปดํ“จํ„ฐ๋ผ๋ฆฌ HTMLํŒŒ์ผ์„ ์–ด๋–ป๊ฒŒ ์ฃผ๊ณ  ๋ฐ›์„์ง€์— ๋Œ€ํ•œ ์•ฝ์†์ด๋‹ค.

๐Ÿ“Œ์ •๋ฆฌํ•˜์ž๋ฉด !
์ปดํ“จํ„ฐ๊ฐ„์˜ HTMLํŒŒ์ผ์„ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์†Œํ†ต๋ฐฉ์‹ ํ˜น์€ ์•ฝ์†

Stateless

๐Ÿ”ดHTTP์— ๋Œ€ํ•œ ์„ค๋ช… ์ค‘ ์žŠ์–ด์„œ๋Š” ์•ˆ ๋  HTTP์˜ ํŠน์ง•์ด ๋ฐ”๋กœ Stateless ๋‹ค.
๋ฌธ์ž ๊ทธ๋Œ€๋กœ ๋ฒˆ์—ญํ•˜๋ฉด State(์ƒํƒœ) + less(์—†์Œ) ์„ ์˜๋ฏธํ•œ๋‹ค.
๐Ÿ”ต

๊ฐ๊ฐ์˜ HTTP ํ†ต์‹ (์š”์ฒญ/์‘๋‹ต)์€ ๋…๋ฆฝ์  ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ณผ๊ฑฐ์˜ ํ†ต์‹ (์š”์ฒญ/์‘๋‹ต)์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ์ „ํ˜€ ์•Œ์ง€ ๋ชป ํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋งค ํ†ต์‹ ๋งˆ๋‹ค ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ๋‹ด์•„์„œ ์š”์ฒญ์„ ๋ณด๋‚ด์•ผ ํ•œ๋‹ค.
๋งŒ์ผ ์—ฌ๋Ÿฌ๋ฒˆ์˜ ํ†ต์‹ (์š”์ฒญ/์‘๋‹ต)์˜ ์ง„ํ–‰๊ณผ์ •์—์„œ ์—ฐ์†๋œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ(ex. ์˜จ๋ผ์ธ ์‡ผํ•‘๋ชฐ์—์„œ ๋กœ๊ทธ์ธ ํ›„ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๊ธฐ๋Šฅ)๋ฅผ ์œ„ํ•ด ๋กœ๊ทธ์ธ ํ† ํฐ ๋˜๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ์ฟ ํ‚ค, ์„ธ์…˜, ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€ ๊ฐ™์€ ๊ธฐ์ˆ ์ด ํ•„์š”์— ์˜ํ•ด ๋งŒ๋“ค์–ด์กŒ๋‹ค.

Request / Response

HTTP Request ๊ตฌ์กฐ

HTTP Request๋ฉ”์‹œ์ง€๋Š” ํฌ๊ฒŒ 3๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

  • start line
  • headers
  • body

start line

1. HTTP Method: ํ•ด๋‹น ์š”์ฒญ์ด ์˜๋„ํ•œ ์•ก์…˜์„ ์ •์˜ํ•˜๋Š” ๋ถ€๋ถ„. ์ฃผ๋กœ GET, POST, DELETE๊ฐ€ ๋งŽ์ด ์“ฐ์ž„
2. Request target: ํ•ด๋‹น request๊ฐ€ ์ „์†ก๋˜๋Š” ๋ชฉํ‘œ url 
3. HTTP Version: ๋ง ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ๋˜๋Š” HTTP ๋ฒ„์ „์„ ๋œปํ•œ๋‹ค. ์ฃผ๋กœ 1.1 ๋ฒ„์ „์ด ๋„๋ฆฌ ์“ฐ์ž„

GET /login HTTP/1.1
ํ•ด์„: GET ๋ฉ”์†Œ๋“œ๋กœ login ์ด๋ผ๋Š” ์š”์ฒญ ํƒ€๊ฒŸ์— HTTP 1.1 ๋ฒ„์ „์œผ๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๊ฒ ๋‹ค!

headers

Key: Value ๊ฐ’์œผ๋กœ ๋˜์–ด์žˆ๋‹ค (JavaScript์˜ ๊ฐ์ฒด, Python์˜ ๋”•์…”๋„ˆ๋ฆฌ ํ˜•ํƒœ๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค)
์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” Headers ์˜ ์ •๋ณด์—๋Š” ๋‹ค์Œ์ด ์žˆ๋‹ค 

Headers: {
	Host: ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๋ชฉํ‘œ(ํƒ€๊ฒŸ)์˜ ์ฃผ์†Œ. ์ฆ‰, ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ์›น์‚ฌ์ดํŠธ์˜ ๊ธฐ๋ณธ ์ฃผ์†Œ๊ฐ€ ๋œ๋‹ค
	(ex. www.apple.co.kr)
	User-Agent: ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ๋Œ€ํ•œ ์ •๋ณด (ex. chrome, firefox, safari, explorer)
	Content-Type: ํ•ด๋‹น ์š”์ฒญ์ด ๋ณด๋‚ด๋Š” ๋ฉ”์„ธ์ง€ body์˜ ํƒ€์ž… (ex. application/json)
	Content-Length: body ๋‚ด์šฉ์˜ ๊ธธ์ด
	Authorization: ํšŒ์›์˜ ์ธ์ฆ/์ธ๊ฐ€๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋กœ๊ทธ์ธ ํ† ํฐ์„ Authroization ์— ๋‹ด๋Š”๋‹ค
}

Body

ex) ๋กœ๊ทธ์ธ ์‹œ์— ์„œ๋ฒ„์— ๋ณด๋‚ผ ์š”์ฒญ์˜ ๋‚ด์šฉ
Body: {
	"user_email": "jun.choi@gmail.com"
	"user_password": "wecode"
}

HTTP Response ๊ตฌ์กฐ

Response๋„ request์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํฌ๊ฒŒ 3๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

  • Status line
  • Headers
  • Body

Status Line

1. HTTP Version: ์š”์ฒญ์˜ HTTP๋ฒ„์ „๊ณผ ๋™์ผ
2. Status Code: ์‘๋‹ต ๋ฉ”์„ธ์ง€์˜ ์ƒํƒœ ์ฝ”๋“œ
3. Status Text: ์‘๋‹ต ๋ฉ”์„ธ์ง€์˜ ์ƒํƒœ๋ฅผ ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…ํ•ด์ฃผ๋Š” ํ…์ŠคํŠธ

Headers

1. ์š”์ฒญ์˜ ํ—ค๋”์™€ ๋™์ผํ•˜๋‹ค.
2. ์‘๋‹ต์˜ ์ถ”๊ฐ€ ์ •๋ณด(๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ)๋ฅผ ๋‹ด๊ณ ์žˆ๋Š” ๋ถ€๋ถ„์ด๋‹ค.
3. ์‘๋‹ต์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋Š” ํ—ค๋”์˜ ์ •๋ณด๋“ค์ด ์žˆ๋‹ค.

Body

1. ์š”์ฒญ์˜ Body์™€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋™์ผํ•˜๋‹ค.
2. ์š”์ฒญ์˜ ๋ฉ”์†Œ๋“œ์— ๋”ฐ๋ผ Body๊ฐ€ ํ•ญ์ƒ ์กด์žฌํ•˜์ง€ ์•Š๋“ฏ์ด. 
์‘๋‹ต๋„ ์‘๋‹ต์˜ ํ˜•ํƒœ์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—” Body๊ฐ€ ์—†์„ ์ˆ˜๋„ ์žˆ๋‹ค. 
3. ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” Body ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์€ JSON(JavaScript Object Notation) ์ด๋‹ค.

ex) ๋กœ๊ทธ์ธ ์š”์ฒญ์— ๋Œ€ํ•ด ์„ฑ๊ณตํ–ˆ์„ ๋•Œ ์‘๋‹ต์˜ ๋‚ด์šฉ
Body: {
	"message": "SUCCESS"
	"token": "kldiduajsadm@9df0asmzm" (์•”ํ˜ธํ™”๋œ ์œ ์ €์˜ ์ •๋ณด)
}

๊ธฐ์–ตํ•˜๊ธฐ!

  1. HTTP ๋Š” ์ปดํ“จํ„ฐ ๋ผ๋ฆฌ์˜ ์†Œํ†ต์„ ์œ„ํ•œ ํ†ต์‹ ๊ทœ์•ฝ์ด๋‹ค.
  2. HTTP ํ†ต์‹ ์€ Request(์š”์ฒญ)๊ณผ Response(์‘๋‹ต)์œผ๋กœ ์ด๋ฃจ์–ด ์ง„๋‹ค.
  3. HTTP ํ†ต์‹ ์˜ ๋งค ์š”์ฒญ๊ณผ ์‘๋‹ต์€ ์ด์ „ ์ƒํƒœ๋ฅผ ์•Œ์ง€ ๋ชป ํ•œ๋‹ค. (Stateless)
profile
DONE IS BETTER THAN PERFECT

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