[TIL] HTTP 톡신

γ…Žγ…μˆ˜Β·2020λ…„ 10μ›” 31일
0

HTTP

🌝 HTTPλŠ” HyperText Transfer Protocol
🌝 컴퓨터듀끼리 HTML νŒŒμΌμ„ 주고받을 수 μžˆλ„λ‘ ν•˜λŠ” μ†Œν†΅λ°©μ‹ λ˜λŠ” 약속, 톡신 κ·œμ•½

HTTP의 두 가지 νŠΉμ§•

1. Request & Respose: ν†΅μ‹ μ˜ 핡심,
2. stateless: μƒνƒœ μ—†μŒ !!

각각의 HTTP 톡신(μš”μ²­/응닡)은 독립적 이기 λ•Œλ¬Έμ— 과거의 톡신(μš”μ²­/응닡)에 λŒ€ν•œ λ‚΄μš©μ„ μ „ν˜€ μ•Œμ§€ λͺ»ν•œλ‹€. λ”°λΌμ„œ 맀 ν†΅μ‹ λ§ˆλ‹€ ν•„μš”ν•œ λͺ¨λ“  정보λ₯Ό λ‹΄μ•„μ„œ μš”μ²­μ„ 보내야 ν•œλ‹€.
λ”°λΌμ„œ, 만일 μ—¬λŸ¬λ²ˆμ˜ 톡신(μš”μ²­/응닡)의 μ§„ν–‰κ³Όμ •μ—μ„œ μ—°μ†λœ 데이터 μ²˜λ¦¬κ°€ ν•„μš”ν•œ 경우(ex. 온라인 μ‡Όν•‘λͺ°μ—μ„œ 둜그인 ν›„ μž₯λ°”κ΅¬λ‹ˆ κΈ°λŠ₯)λ₯Ό μœ„ν•΄ 둜그인 토큰 λ˜λŠ” λΈŒλΌμš°μ €μ˜ μΏ ν‚€, μ„Έμ…˜, λ‘œμ»¬μŠ€ν† λ¦¬μ§€ 같은 기술이 ν•„μš”μ— μ˜ν•΄ λ§Œλ“€μ–΄μ‘Œλ‹€.

Request / Response (μš”μ²­ / 응닡)

Request

  • HTTP μš”μ²­μ€ ν”„λ‘ νŠΈμ—”λ“œ(ν΄λΌμ΄μ–ΈνŠΈ)μ—μ„œ λ°±μ—”λ“œ(μ„œλ²„)에 일(데이터 처리)을 μ‹œμž‘ν•˜κ²Œ ν•˜κΈ° μœ„ν•΄ λ³΄λ‚΄λŠ” 메세지.
  • 크게 μ„Έ λΆ€λΆ„μœΌλ‘œ ꡬ성
  1. Start Line : μš”μ²­μ˜ 첫 번째 쀄. μ„Έ λΆ€λΆ„μœΌλ‘œ ꡬ성
1. HTTP Method: ν•΄λ‹Ή μš”μ²­μ΄ μ˜λ„ν•œ μ•‘μ…˜μ„ μ •μ˜ν•˜λŠ” λΆ€λΆ„. 주둜 GET, POST, DELETEκ°€ 많이 μ“°μž„
2. Request target: ν•΄λ‹Ή requestκ°€ μ „μ†‘λ˜λŠ” λͺ©ν‘œ url
3. HTTP Version: 말 κ·ΈλŒ€λ‘œ μ‚¬μš©λ˜λŠ” HTTP 버전

GET /login HTTP/1.1
해석: GET λ©”μ†Œλ“œλ‘œ login μ΄λΌλŠ” μš”μ²­ νƒ€κ²Ÿμ— HTTP 1.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 에 λ‹΄λŠ”λ‹€
}
  1. Body: ν•΄λ‹Ή μš”μ²­μ˜ μ‹€μ œ λ‚΄μš©. 주둜 Bodyλ₯Ό μ‚¬μš©ν•˜λŠ” λ©”μ†Œλ“œλŠ” POSTλ‹€.
ex) 둜그인 μ‹œμ— μ„œλ²„μ— 보낼 μš”μ²­μ˜ λ‚΄μš©
Body: {
	"user_email": "jun.choi@gmail.com"
	"user_password": "wecode"
}

Response

  1. 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. Headers
  • μš”μ²­μ˜ 헀더와 동일
  • μ‘λ‹΅μ˜ μΆ”κ°€ 정보(메타 데이터)λ₯Ό λ‹΄κ³ μžˆλŠ” λΆ€λΆ„
  • μ‘λ‹΅μ—μ„œλ§Œ μ‚¬μš©λ˜λŠ” ν—€λ”μ˜ 정보듀이 μžˆλ‹€. (ex. μš”μ²­ν•˜λŠ” λΈŒλΌμš°μ €μ˜ 정보가 λ‹΄κΈ΄ User-Agent λŒ€μ‹ , Server 헀더가 μ‚¬μš©λœλ‹€.)
  1. Body
  • Body: μš”μ²­μ˜ Body와 일반적으둜 λ™μΌν•˜λ‹€. μš”μ²­μ˜ λ©”μ†Œλ“œμ— 따라 Bodyκ°€ 항상 μ‘΄μž¬ν•˜μ§€ μ•Šλ“―μ΄. 응닡도 μ‘λ‹΅μ˜ ν˜•νƒœμ— 따라 데이터λ₯Ό 전솑할 ν•„μš”κ°€ μ—†λŠ” κ²½μš°μ—” Bodyκ°€ 없을 μˆ˜λ„ μžˆλ‹€. κ°€μž₯ 많이 μ‚¬μš©λ˜λŠ” Body 의 데이터 νƒ€μž…μ€ JSON(JavaScript Object Notation) 이닀.
ex) 둜그인 μš”μ²­μ— λŒ€ν•΄ μ„±κ³΅ν–ˆμ„ λ•Œ μ‘λ‹΅μ˜ λ‚΄μš©
Body: {
	"message": "SUCCESS"
	"token": "kldiduajsadm@9df0asmzm" (μ•”ν˜Έν™”λœ μœ μ €μ˜ 정보)
}

HTTP Request Methods

1. GET

  • μ–΄λ–€ 데이터λ₯Ό μ„œλ²„λ‘œλΆ€ν„° λ°›μ•„μ˜¬ λ•Œ 주둜 μ‚¬μš©(GET)
ex) μž₯λ°”κ΅¬λ‹ˆμ— 담은 μ œν’ˆμ„ μ‘°νšŒν•  λ•Œ 

2. POST

  • 데이터λ₯Ό 생성 / μˆ˜μ •ν•  λ•Œ 주둜 μ‚¬μš©λ˜λŠ” λ©”μ†Œλ“œ
  • 데이터λ₯Ό 생성 및 μˆ˜μ •ν•  λ•Œ 많이 μ‚¬μš©λ˜κΈ° λ•Œλ¬Έμ— λŒ€λΆ€λΆ„μ˜ 경우 μš”μ²­μ— bodyκ°€ ν¬ν•¨λΌμ„œ 보내진닀.
ex) μž₯λ°”κ΅¬λ‹ˆμ— λ§˜μ— λ“œλŠ” μƒν’ˆμ„ 담을 λ•Œ

3. DELETE

  • λ©”μ†Œλ“œμ˜ μ΄λ¦„μ—μ„œ μœ μΆ” κ°€λŠ₯ν•˜λ“―, νŠΉμ • 데이터λ₯Ό μ„œλ²„μ—μ„œ μ‚­μ œ μš”μ²­μ„ 보낼 λ•Œ μ“°λŠ” λ©”μ†Œλ“œ
ex) μž₯λ°”κ΅¬λ‹ˆμ—μ„œ μ œν’ˆμ„ μ‚­μ œν•  λ•Œ

Response Status Codes

μ‹€μ œ ν”„λ‘œμ νŠΈλ₯Ό 진행할 λ•Œ κ°€μž₯ 많이 보게될 μ‘λ‹΅μ˜ μƒνƒœ μ½”λ“œ

200: OK

  • κ°€μž₯ 자주 λ³΄κ²Œλ˜λŠ” Status Code
  • λ¬Έμ œμ—†μ΄ μš”μ²­μ— λŒ€ν•œ μ²˜λ¦¬κ°€ λ°±μ—”λ“œ μ„œλ²„μ—μ„œ 이루어지고 λ‚˜μ„œ μ˜€λŠ” μ‘λ‹΅μ½”λ“œ
  • μš°λ¦¬λŠ” λͺ¨λ‘ 200 OK λ₯Ό μ›ν•œλ‹€

201: Created

  • 무언가가 잘 μƒμ„±λ˜μ—ˆμ„ λ•Œμ—(Successfully Created) μ˜€λŠ” Status Code
  • λŒ€κ²Œ POST λ©”μ†Œλ“œμ˜ μš”μ²­μ— 따라 λ°±μ—”λ“œ μ„œλ²„μ— 데이터가 잘 생성 λ˜λŠ” μˆ˜μ • λ˜μ—ˆμ„ λ•Œμ— λ³΄λ‚΄λŠ” μ½”λ“œ

400: Bad Request

  • ν•΄λ‹Ή μš”μ²­μ΄ 잘λͺ»λ˜μ—ˆμ„ λ•Œ λ³΄λ‚΄λŠ” Status Code
  • 주둜 μš”μ²­μ˜ Body에 λ³΄λ‚΄λŠ” λ‚΄μš©μ΄ 잘λͺ»λ˜μ—ˆμ„ λ•Œ μ‚¬μš©λ˜λŠ” μ½”λ“œ
    ex) μ „ν™”λ²ˆν˜Έλ₯Ό 보내야 ν•˜λŠ”λ° μˆ«μžκ°€ μ•„λ‹Œ λ¬Έμžμ—΄μ˜ μ£Όμ†Œκ°€ λŒ€μ‹  Body에 담겼을 경우

401: Unauthorized

  • μœ μ €κ°€ ν•΄λ‹Ή μš”μ²­μ„ μ§„ν–‰ν•˜λ €λ©΄ λ¨Όμ € λ‘œκ·ΈμΈμ„ ν•˜κ±°λ‚˜ νšŒμ›κ°€μž…μ΄ ν•„μš”ν•˜λ‹€λŠ” 의미
    ex) wish list, μ’‹μ•„μš” κΈ°λŠ₯은 νšŒμ›μ΄ μ•„λ‹ˆλ©΄ μš”μ²­μ„ 보낼 수 μ—†μŒ

403: Forbidden

  • μœ μ €κ°€ ν•΄λ‹Ή μš”μ²­μ— λŒ€ν•œ κΆŒν•œμ΄ μ—†λ‹€λŠ” 뜻
  • μ ‘κ·Ό λΆˆκ°€λŠ₯ν•œ 정보에 μ ‘κ·Όν–ˆμ„ 경우
    ex) 였직 μœ λ£ŒνšŒμ›λ§Œ μ ‘κ·Όν•  수 μžˆλŠ” 데이터λ₯Ό μš”μ²­ ν–ˆμ„ λ•Œ

404: Not Found

  • μš”μ²­λœ URI κ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 의미

500: Internal Server Error

  • μ„œλ²„μ—μ„œ μ—λŸ¬κ°€ 났을 λ•Œμ˜ Status Code
  • API κ°œλ°œμ„ ν•˜λŠ” λ°±μ—”λ“œ κ°œλ°œμžλ“€μ΄ μ‹«μ–΄ν•˜λŠ” μ½”λ“œ (ν”„λ‘ νŠΈλŠ” λ‚΄ 잘λͺ» μ•„λ‹ˆλΌλŠ” 것을 μ•Œ 수 μžˆλŠ” μ½”λ“œ)
  • HTTPλŠ” μ»΄ν“¨ν„°λΌλ¦¬μ˜ μ†Œν†΅μ„ μœ„ν•œ ν†΅μ‹ κ·œμ•½μ΄λ‹€.
  • HTTP톡신은 Request(μš”μ²­)κ³Ό Respose(응닡)으둜 이루어진닀.
  • HTTP ν†΅μ‹ μ˜ 맀 μš”μ²­κ³Ό 응닡은 이전 μƒνƒœλ₯Ό μ•Œμ§€ λͺ»ν•œλ‹€. (Stateless)

0개의 λŒ“κΈ€