HTTP

γ…Žγ…ŽΒ·2021λ…„ 6μ›” 17일
0

πŸ“Œ HTTP

: HyperText Transfer Ptotocol

  • HyperText? - λ¬Έμ„œμ™€ λ¬Έμ„œκ°€ 링크둜 μ—°κ²°λ˜μ–΄ 있음.
  • Transfer? - HTML을 λ§Œλ“  μ›ΉνŽ˜μ΄μ§€ λ¬Έμ„œ(파일)을 보낸닀.
  • Protoclol? - 컴퓨터끼리 μ–΄λ–»κ²Œ HTML νŒŒμΌμ„ μ£Όκ³  받을 지에 λŒ€ν•œ μ†Œν†΅ 방식 λ˜λŠ” 약속
  • HTTP 말고도 컴퓨터끼리 μ†Œν†΅μ„ ν•˜λŠ” λ‹€λ₯Έ 방식도 μ‘΄μž¬ν•¨.
  • μ‚¬μš©μžκ°€ μ’‹μ•„μš” 같은 κΈ°λŠ₯을 μš”μ²­μ„ ν•˜λ©΄ 응닡을 ν•œλ‹€. 이 ν•˜λ‚˜μ˜ 쌍이 HTTP ν†΅μ‹ μ˜ ν•œ 사이클이닀.

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

  • μ»΄ν“¨ν„°λΌλ¦¬μ˜ μ†Œν†΅λ„ κ²°κ΅­ μ‚¬λžŒμ΄ ν•„μš”μ— μ˜ν•΄ λ§Œλ“  μ†Œν†΅ 방식이기 λ•Œλ¬Έμ— μ‚¬λžŒμ²˜λŸΌ ν…μŠ€νŠΈλ‘œ μ†Œν†΅ν•œλ‹€.

- μš”μ²­ λ©”μ‹œμ§€ ꡬ쑰

  • HTTP μš”μ²­μ€ ν”„λ‘ νŠΈμ—”νŠΈ(ν΄λΌμ΄μ–ΈνŠΈ)μ—μ„œ λ°±μ—”λ“œ(μ„œλ²„)에 λ°μ΄ν„°μ²˜λ¦¬λ₯Ό μ‹œμž‘ν•˜κΈ° μœ„ν•΄ λ³΄λ‚΄λŠ” 메세지이닀. 이 메세지 κ΅¬μ‘°λŠ” μ„Έ λΆ€λΆ„μœΌλ‘œ μ΄λ£¨μ–΄μ Έμžˆλ‹€.

  1. strat 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 λ²„μ „μœΌλ‘œ μš”μ²­μ„ 보내겠닀!
  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 : μš”μ²­μ˜ μ‹€μ œ λ‚΄μš©(μš”μ²­μ— 따라 μ‘΄μž¬ν•˜μ§€ μ•Šμ„ 수 있음)

ex) 둜그인 μ‹œμ— μ„œλ²„μ— 보낼 μš”μ²­μ˜ λ‚΄μš©
Body: {
"user_email": "jun.choi@gmail.com"
"user_password": "wecode"
}

  • μ‹€μ œ μ˜ˆμ‹œ

- 응닡 메세지 ꡬ쑰

  1. status line : μ‘λ‹΅μ˜ μƒνƒœ 쀄. 응닡에 λŒ€ν•œ μ²˜λ¦¬μƒνƒœλ₯Ό ν΄λΌμ΄μ–ΈνŠΈ(ν”„λ‘ νŠΈμ—”λ“œ)μ—κ²Œ μ•Œλ €μ£Όλ©΄μ„œ λ‚΄μš©μ„ μ‹œμž‘ν•œλ‹€.
  2. Headers : μš”μ²­μ˜ Headers와 일반적으둜 λ™μΌν•˜λ‹€. λ‹€λ§Œ μ‘λ‹΅μ—μ„œλ§Œ μ‚¬μš©λ˜λŠ” ν—€λ”μ˜ 정보듀이 μžˆλ‹€. ( ex. μš”μ²­ν•˜λŠ” λΈŒλΌμš°μ €μ˜ 정보가 λ‹΄κΈ΄ User-Agent λŒ€μ‹ , Server 헀더가 μ‚¬μš©λœλ‹€. )
  3. Body: μš”μ²­μ˜ Body와 일반적으둜 λ™μΌν•˜λ‹€. ν•˜μ§€λ§Œ μš”μ²­μ˜ λ©”μ†Œλ“œμ— 따라 데이터λ₯Ό 전솑할 ν•„μš”κ°€ μ—†λŠ” κ²½μš°μ—λŠ” Bodyκ°€ 없을 μˆ˜λ„ μžˆλ‹€. κ°€μž₯ 많이 μ‚¬μš©λ˜λŠ” Body의 데이터 νƒ€μž…μ€ JSON이닀.


Stateless

  • HTTP κ°œλ³„ 톡신은 λͺ¨λ‘ λ…λ¦½μ μ΄μ–΄μ„œ, 과거의 톡신 κ²°κ³Όλ₯Ό λ³΄μ‘΄ν•˜μ§€ μ•ŠλŠ”λ‹€. λ§Œμ•½ λ‘κ°œμ˜ μš”μ²­μ΄ μžˆλ‹€λ©΄ μ„œλ‘œκ°€ μ„œλ‘œμ˜ μš”μ²­μ„ λͺ¨λ¦„. λ”°λΌμ„œ 단점은 λ§Œμ•½ λ‘œκ·ΈμΈκ°™μ€ μ„ ν–‰κΈ°λŠ₯이 μžˆλ‹€λ©΄ κ·Έ 전에 λ‘œκ·ΈμΈμ„ ν–ˆλ‹€λŠ” 것을 μ¦ν‘œλ₯Ό 같이 λ³΄λ‚΄μ€˜μ•Ό 함. 이λ₯Ό 토큰이라고 함.
    (토큰은 λ°±μ—”λ“œκ°€ λ§Œλ“€μ–΄μ„œ ν”„λ‘ νŠΈμ—κ²Œ μ€€λ‹€. ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ£ΌλŠ”κ²ƒμ€ μ•„λ‹˜ )

HTTP Request Methods

  • 이 λ©”μ†Œλ“œλ“€μ€ ν”„λ‘ νŠΈμ—”λ“œ(ν΄λΌμ΄μ–ΈνŠΈ)의 μž…μž₯μ—μ„œ μš”μ²­μ˜ μ˜λ„κ°€ 담긴것이닀. λ°±μ—”λ“œμ˜ μž…μž₯μ—μ„œ μƒκ°ν•˜λ©΄ ν˜Όλž€μ΄ 올 수 μžˆμœΌλ‹ˆ μ£Όμ˜ν•˜μž.

- GET

  • 이름 κ·ΈλŒ€λ‘œ μ–΄λ–€ 데이터λ₯Ό μ„œλ²„λ‘œλΆ€ν„° λ°›μ•„(GET)올 λ•Œ μ‚¬μš©ν•˜λŠ” λ©”μ†Œλ“œ 즉, 데이터λ₯Ό λ°›μ•„μ˜€κΈ°λ§Œ ν•  λ•Œ μ‚¬μš©λœλ‹€.
  • κ°€μž₯ κ°„λ‹¨ν•˜κ³  많이 μ‚¬μš©λ˜λŠ” HTTPλ©”μ†Œλ“œμ΄λ‹€.
# μž₯λ°”κ΅¬λ‹ˆμ— 담은 μ œν’ˆμ„ μ‘°νšŒν•œλ‹€. 
(μΆ•μ•½λœ μš”μ²­ 메세지)
GET /shop/bag HTTP/1.1
Headers: {
	"HOST": "https://www.apple.com/kr"
	"Authroization": "kldiduajsadm@9df0asmzm" (μœ μ €κ°€ λ³ΈμΈμž„μ„ 증λͺ…ν•  수 μžˆλŠ” 인증/인가 토큰)
}

(μΆ•μ•½λœ 응닡 λ©”μ‹œμ§€)
HTTP/1.1 200 SUCCESS
Body: {
	"message": "SUCCESS"
	"carts": [
		{
			"productId": 10
			"name": "Pro Display XDR - Nano-texture κΈ€λž˜μŠ€"
			"price": "β‚©7,899,000"
			"quantity": 1
		},
		{
			"productId": 20
			"name": "Mac Pro"
			"price": "β‚©73,376,000"
			"quantity": 2
		}	
	]
}

- POST

  • 데이터λ₯Ό 생성/μˆ˜μ •/μ‚­μ œν•  λ•Œ μ‚¬μš©ν•˜λŠ” λ©”μ†Œλ“œ, 즉 데이터λ₯Ό 생성,μˆ˜μ •ν• λ•Œ 많이 μ‚¬μš©λ˜κΈ° λ•Œλ¬Έμ— λŒ€λΆ€λΆ„μ˜ 경우 μš”μ²­μ— bodyκ°€ ν¬ν•¨λ˜μ„œ 보내진닀.
#μž₯λ°”κ΅¬λ‹ˆμ— λ§˜μ— λ“œλŠ” μƒν’ˆμ„ λ‹΄λŠ”λ‹€. 
(μΆ•μ•½λœ μš”μ²­ 메세지)
POST /shop/bag HTTP/1.1
Headers: {
	"HOST": "https://www.apple.com/kr"
	"Authroization": "kldiduajsadm@9df0asmzm" (μœ μ €κ°€ λ³ΈμΈμž„μ„ 증λͺ…ν•  수 μžˆλŠ” 인증/인가 토큰)
}
Body: {
	product: {
		"productId": 30
		"name": "12.9ν˜• iPad Pro Wi-Fi + Cellular 128GB"
		"color": "슀페이슀 그레이"
		"price": "β‚©1,499,000"
		"quantity": 1
	}
}

(μΆ•μ•½λœ 응닡 λ©”μ‹œμ§€)
HTTP/1.1 201 SUCCESS
Body: {
	"message": "SUCCESSFULLY CARTS UPDATED"
}

- DELETE

  • νŠΉμ • 데이터λ₯Ό μ„œλ²„μ—μ„œ μ‚­μ œ μš”μ²­μ„ 보낼 λ•Œ μ“°λŠ” λ©”μ†Œλ“œ
#μž₯λ°”κ΅¬λ‹ˆμ—μ„œ μ œν’ˆμ„ μ‚­μ œν•œλ‹€. 
(μΆ•μ•½λœ μš”μ²­ 메세지)
DELETE /shop/bag HTTP/1.1
Headers: {
	"HOST": "https://www.apple.com/kr"
	"Authroization": "kldiduajsadm@9df0asmzm" (μœ μ €κ°€ λ³ΈμΈμž„μ„ 증λͺ…ν•  수 μžˆλŠ” 인증/인가 토큰)
}
Body: {
	productId: 30
}

(μΆ•μ•½λœ 응닡 λ©”μ‹œμ§€)
HTTP/1.1 201 SUCCESS
Body: {
	"message": "productId 30 DELETED"
}

λŒ€ν‘œμ μΈ Status code

  • Status Code의 μˆ«μžμ— 각각 μ˜λ―Έκ°€ λ‚΄ν¬λ˜μ–΄μžˆλ‹€. 이 Status Code만 보아도 응닡이 μ œλŒ€λ‘œ λλŠ”μ§€ μ•ˆ λλŠ”μ§€λ₯Ό νŒŒμ•…ν•  수 μžˆλ‹€.

- 200 : OK

  • λ¬Έμ œμ—†μ΄ μš”μ²­μ— λŒ€ν•œ μ²˜λ¦¬κ°€ λ°±μ—”λ“œ μ„œλ²„μ—μ„œ μ΄λ£¨μ–΄μ§€λ‚˜κ³  λ‚˜μ„œ μ˜€λŠ” 응닡 μ½”λ“œ

- 201 : Created

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

- 400 : Bad Request

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

- 401 : Unauthorized

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

- 403 : Forbidden

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

- 404 : Not Found

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

- 500 : Internal Server Error

  • μ„œλ²„μ—μ„œ μ—λŸ¬κ°€ 났을 λ•Œμ˜ 응닡 μ½”λ“œ
  • (API κ°œλ°œμ„ ν•˜λŠ” λ°±μ—”λ“œ κ°œλ°œμžλ“€μ΄ μ‹«μ–΄ν•˜λŠ” μ½”λ“œ,,,)

0개의 λŒ“κΈ€