[http] wecode 7์ผ!

4038 ๋‹จ์–ด httphttp

HTTP๋ž€?

http๋Š” HyperText Transfer Protocol์˜ ์•ฝ์ž๋‹ค. HTML์„ ๋ณด์ž๋ฉด HyperText๋Š” ๋ฌธ์„œ์™€ ๋ฌธ์„œ๊ฐ€ ๋งํฌ๋กœ ์—ฐ๊ฒฐ๋˜๋„๋ก ํ•˜๋Š” ํƒœ๊ทธ๋กœ ๊ตฌ์„ฑ๋œ ์–ธ์–ด๋ž€ ๋œป์ด๋‹ค. ๋‹ค์‹œ ๋งํ•˜๋ฉด, HTML์€ ์›นํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ ์›น๋ธŒ๋ผ์šฐ์ € ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ์–ธ์–ด๋ฅผ ๋œปํ•œ๋‹ค. Transfer๋Š” ๋ง๊ทธ๋Œ€๋กœ ์ „์†ก์ด๋‹ค. post์™€ get์„ ํ†ตํ•ด ์„œ๋ฒ„์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š”๋‹ค. Protocol์€ ๊ทœ์•ฝ์ด๋‹ค. ์ปดํ“จํ„ฐ๋ผ๋ฆฌ ์–ด๋–ป๊ฒŒ Hyper Text๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„์ง€์— ๋Œ€ํ•œ ์•ฝ์†์ด๋‹ค.

HTTP ํŠน์ง•

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

์š”์ฒญ๊ณผ ์‘๋‹ต์€ HTTP๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์ค‘์š”ํ•œ ์š”์†Œ๋‹ค.

2. Stateless

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

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

์ถœ์ฒ˜ : ์œ„์ฝ”๋“œ

Request / Response

1. Request ๋ฉ”์„ธ์ง€ ๊ตฌ์กฐ

HTTP์š”์ฒญ์€ ํ”„๋ก ํŠธ์—”๋“œ(ํด๋ผ์ด์–ธํŠธ)๊ฐ€ ๋ฐฑ์—”๋“œ(์„œ๋ฒ„)์— ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ๋ณด๋‚ด๋Š” ๋ฉ”์‹œ์ง€๋‹ค. ์ด ๋ฉ”์‹œ์ง€๋Š” ํฌ๊ฒŒ ์„ธ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

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

GET /login HTTP/1.1

ํ•ด์„: GET ๋ฉ”์†Œ๋“œ๋กœ login ์ด๋ผ๋Š” ์š”์ฒญ ํƒ€๊ฒŸ์— HTTP 1.1 ๋ฒ„์ „์œผ๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๊ฒ ๋‹ค!
  1. header : ํ—ค๋”๋Š” ํ•ด๋‹น ์š”์ฒญ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค.

key: Value ๊ฐ’์œผ๋กœ ๋˜์–ด์žˆ๋‹ค. ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” 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 ์— ๋‹ด๋Š”๋‹ค
}

  1. body : ํ•ด๋‹น ์š”์ฒญ์˜ ์‹ค์ œ ๋‚ด์šฉ์œผ๋กœ ์ฃผ๋กœ Body๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋Š” POST๋‹ค.

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

2.Response ๋ฉ”์‹œ์ง€ ๊ตฌ์กฐ

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

HTTP/1.1 404 Not Found
ํ•ด์„: HTTP 1.1 ๋ฒ„์ „์œผ๋กœ ์‘๋‹ตํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ๋ณด๋‚ธ ์š”์ฒญ(ex. ๋กœ๊ทธ์ธ ์‹œ๋„)์— ๋Œ€ํ•ด์„œ
์œ ์ €์˜ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—(Not Found) 404 ์ƒํƒœ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ธ๋‹ค.

HTTP/1.1 200 SUCCESS
ํ•ด์„: HTTP 1.1 ๋ฒ„์ „์œผ๋กœ ์‘๋‹ตํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ๋ณด๋‚ธ ์š”์ฒญ์— ๋Œ€ํ•ด์„œ ์„ฑ๊ณตํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—
200 ์ƒํƒœ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ธ๋‹ค.

  1. header : ์š”์ฒญ์˜ ํ—ค๋”์™€ ๋™์ผํ•˜๋‹ค.

  2. body : ์š”์ฒญ์˜ Body์™€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋™์ผํ•˜๋‹ค. ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” Body ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์€ JSON(JavaScript Object Notation) ์ด๋‹ค.

HTTP Request Methods

๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋กœ๋Š” GET, POST, DELETE๊ฐ€ ์žˆ๋‹ค.

  1. GET

  1. POST

๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑ / ์ˆ˜์ • ํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์†Œ๋“œ๋‹ค.

  1. DELETE

Response Status Codes

200: OK

๋ง ๊ทธ๋Œ€๋กœ ๋ฌธ์ œ ์—†์ด ์ž˜ ์ฒ˜๋ฆฌ ๋œ๋‹ค๋Š” ๋œป์ด๋‹ค.

201: Created

๋ฌด์–ธ๊ฐ€ ์ƒ์„ฑ๋์„ ๋•Œ ์˜ค๋Š” ์‘๋‹ต

400: Bad Request

ํ•ด๋‹น ์š”์ฒญ์ด ์ž˜๋ชป๋˜์—ˆ์„ ๋•Œ ๋ณด๋‚ด๋Š” Status Code. ์ฃผ๋กœ ์š”์ฒญ์˜ Body์— ๋ณด๋‚ด๋Š” ๋‚ด์šฉ์ด ์ž˜๋ชป๋˜์—ˆ์„ ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์ฝ”๋“œ๋‹ค.

401: Unauthorized

๋กœ๊ทธ์ธ์ด๋‚˜ ์ผ์ • ๊ถŒํ•œ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๋œป์ด๋‹ค.

403: Forbidden

๊ถŒํ•œ์ด ์—†๋‹ค๋Š” ๋œป์ด๋‹ค.

404: Not Found

์š”์ฒญ๋œ URI๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

500: Internal Server Error

์„œ๋ฒ„์—์„œ ์—๋Ÿฌ ๋‚ฌ์„ ๋•Œ ์ฝ”๋“œ

์ถœ์ฒ˜ : ์œ„์ฝ”๋“œ

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ