HTTPλž€?

jiniΒ·2023λ…„ 3μ›” 30일
1

CSπŸŽ€

λͺ©λ‘ 보기
7/13
post-thumbnail

πŸ—‚ HTTPλž€?

πŸ“ŒHTTP (HyperText Transfer Protocol)

ν…μŠ€νŠΈ 기반의 톡신 κ·œμ•½μœΌλ‘œ μΈν„°λ„·μ—μ„œ 데이터λ₯Ό 주고받을 수 μžˆλŠ” ν”„λ‘œν† μ½œμ΄λ‹€. μ΄λ ‡κ²Œ κ·œμ•½μ„ μ •ν•΄λ‘μ—ˆκΈ° λ•Œλ¬Έμ— λͺ¨λ“  ν”„λ‘œκ·Έλž¨μ΄ 이 κ·œμ•½μ— 맞좰 κ°œλ°œν•΄μ„œ μ„œλ‘œ 정보λ₯Ό κ΅ν™˜ν•  수 있게 λ˜μ—ˆλ‹€.

주둜 μ›Ή λΈŒλΌμš°μ €μ™€ μ›Ή μ„œλ²„ κ°„μ˜ ν†΅μ‹ μ—μ„œ μ‚¬μš©λ˜λ©°, HTTPλŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ— μš”μ²­(request)을 보내면, μ„œλ²„λŠ” μš”μ²­μ— λŒ€ν•œ 응닡(response)을 λ³΄λ‚΄λŠ” λ°©μ‹μœΌλ‘œ λ™μž‘ν•©λ‹ˆλ‹€.

  • μš”μ²­ : client -> server
  • 응닡 : server -> client

πŸ“Œ HTTP νŠΉμ§•

  • HTTP λ©”μ„Έμ§€λŠ” μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈμ— μ˜ν•΄ ν•΄μ„λœλ‹€.
  • TCP/IP λ₯Ό μ΄μš©ν•˜λŠ” μ‘μš©ν”„λ‘œν† μ½œ(application protocol) 이닀.
  • HTTPλŠ” μ—°κ²°μƒνƒœλ₯Ό μœ μ§€ν•˜μ§€ μ•ŠλŠ” λΉ„μ—°κ²°μ„± ν”„λ‘œν† μ½œμž…λ‹ˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈκ°€ 이전에 μš”μ²­ν•œ λ‚΄μš©μ„ κΈ°μ–΅ν•˜κ³  μžˆμ§€ μ•ŠλŠ”λ‹€ λΌλŠ” 것.
  • λΉ„μ—°κ²°μ„±μ˜ 단점을 ν•΄κ²°ν•˜κΈ° μœ„ν•΄ Cookie 와 Session 이 λ“±μž₯ν–ˆλ‹€.
  • λΉ„μ—°κ²°μ„± ν”„λ‘œν† μ½œμ΄κΈ° λ•Œλ¬Έμ— μš”μ²­/응닡 방식 으둜 λ™μž‘ν•œλ‹€.
  • 도메인 + μžμ›μœ„μΉ˜(URL), 도메인 + μžμ›μ˜ μ‹λ³„μž(URI) λ₯Ό ν†΅ν•΄μ„œ μš”μ²­μ„ ν•˜κ³ , μ„œλ²„κ°€ μš”μ²­μ— λ”°λ₯Έ HTML λ¬Έμ„œμ‘λ‹΅μ„ ν•΄μ€Œ
    HTML λ¬Έμ„œλ§Œμ΄ HTTP 톡신을 μœ„ν•œ μœ μΌν•œ μ •λ³΄λ¬Έμ„œλŠ” μ•„λ‹ˆλ‹€.
  • Plain text둜 λΆ€ν„° JSON데이터 및 XMLκ³Ό 같은 ν˜•νƒœμ˜ 정보도 μ£Όκ³  받을 수 μžˆλ‹€.
  • 보톡은 ν΄λΌμ΄μ–ΈνŠΈκ°€ μ–΄λ–€ 정보λ₯Ό HTML ν˜•νƒœλ‘œ λ°›κ³  싢은지, JSON ν˜•νƒœλ‘œ λͺ…μ‹œν•˜λŠ” κ²½μš°κ°€ λ§Žλ‹€.
  • HTTP κ°€ 전체 인터넷 ν”„λ‘œν† μ½œμ—μ„œ μœ„μΉ˜ν•˜λŠ” 곳은 μ‘μš©κ³„μΈ΅μ΄λ‹€.
    • μ‘μš© 계측 (DNS, FTP, HTTP)
    • 전솑 계측 (TCP,UDP,SCTP)
    • λ„€νŠΈμ›Œν¬ 계측 (IP,ARP,RARP)
    • 링크 계측 (이더넷, WIFI, 토큰링)

1) ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­: HTTP Requestμš”μ²­ λ©”μ„œλ“œ

ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ— 데이터λ₯Ό μš”μ²­(Request)ν•˜λŠ”κ²ƒμ€ μ‹λ‹Ήμ—μ„œ μ£Όλ¬Έμ„œλ₯Ό μž‘μ„±ν•˜λŠ”κ²ƒκ³Ό κ°™λ‹€. 이 μ£Όλ¬Έμ„œλŠ” μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈκ°€ μ–΄λ–€κ±Έ μ›ν•˜λŠ”μ§€ νŒŒμ•…ν•  수 있게 ν•΄μ€€λ‹€.
μ—¬κΈ°μ„œ μš”μ²­ν•˜λŠ” 데이터에 νŠΉμ • λ™μž‘μ„ ν•˜λ„λ‘ ν•˜κΈ° μœ„ν•΄μ„œ HTTP μš”μ²­ λ©”μ„œλ“œ(Http Request Methods)λΌλŠ”κ±Έ μ΄μš©ν•œλ‹€.

GET : 정보 검색 ex) κ²Œμ‹œνŒ 리슀트 뢈러였기
POST : μ‹€ν–‰ / μ €μž₯ ex) νšŒμ›κ°€μž… / 둜그인
PUT : 전체 μˆ˜μ • ex) νšŒμ›μ •λ³΄ 전체 μˆ˜μ •
DELETE : μ‚­μ œ ex) νšŒμ›μ •λ³΄ μ‚­μ œ
PATCH : 일뢀 μˆ˜μ • ex) νšŒμ›μ •λ³΄ 일뢀 μˆ˜μ • (Update에 κ°€μž₯ κ°€κΉκ²Œ 쓰이고 μžˆλ‹€)
OPTIONS : μ‹œμŠ€ν…œμ—μ„œ μ§€μ›ν•˜λŠ” λ©”μ†Œλ“œ 확인

2) μ„œλ²„μ˜ 응닡: HTTP λ©”μ‹œμ§€μ™€ μƒνƒœμ½”λ“œ

ν΄λΌμ΄μ–ΈνŠΈκ°€ μ›ν•˜λŠ” 데이터에 λŒ€ν•œ μ£Όλ¬Έμ„œλ₯Ό μ μ–΄μ„œ μ„œλ²„μ— 보내듯이, μ„œλ²„λ„ 응닡에 λŒ€ν•œ 정보λ₯Ό λ‹΄μ•„ ν΄λΌμ΄μ–ΈνŠΈλ‘œ λ³΄λ‚΄λŠ”λ°, 이런 정보가 λ‹΄κΈ΄ λ©”μ‹œμ§€λ₯Ό HTTP λ©”μ‹œμ§€λΌκ³  λΆ€λ₯Έλ‹€. HTTP λ©”μ‹œμ§€λŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ— λŒ€ν•œ httpλ©”μ‹œμ§€μ™€ 데이터 μš”μ²­μ— λŒ€ν•œ 응닡 http λ©”μ‹œμ§€κ°€ μžˆλ‹€.

πŸ—‚ HTTP 메세지 ꡬ쑰에 λŒ€ν•΄ μ„€λͺ…ν•΄μ£Όμ„Έμš”.

βœ”οΈ HTTP λ©”μ‹œμ§€ ꡬ쑰 : μš”μ²­ 라인, 헀더, 곡백라인(ν•„μˆ˜), λ©”μ‹œμ§€ λ°”λ””

λ©”μ„Έμ§€μ˜ κ΅¬μ‘°λ‘œλŠ” 크게 3가지가 μžˆμŠ΅λ‹ˆλ‹€.

  • μš”μ²­/응닡 라인: μš”μ²­ λ©”μ‹œμ§€μ˜ 경우, HTTP λ©”μ„œλ“œ(GET, POST, PUT, DELETE λ“±)와 μš”μ²­ λŒ€μƒ URL이 ν¬ν•¨λ©λ‹ˆλ‹€. 응닡 λ©”μ‹œμ§€μ˜ 경우, HTTP 버전과 μƒνƒœ μ½”λ“œ(200 OK, 404 Not Found λ“±)κ°€ ν¬ν•¨λ©λ‹ˆλ‹€.

  • 헀더: μš”μ²­μ΄λ‚˜ 응닡에 λŒ€ν•œ 뢀가적인 정보가 ν¬ν•¨λ©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μš”μ²­ ν—€λ”μ—λŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ— λ³΄λ‚΄λŠ” 데이터 νƒ€μž…, 인증 정보 등이 포함될 수 μžˆμŠ΅λ‹ˆλ‹€. 응닡 ν—€λ”μ—λŠ” μ„œλ²„μ—μ„œ λ³΄λ‚΄λŠ” λ°μ΄ν„°μ˜ νƒ€μž…, 데이터 길이 등이 포함될 수 μžˆμŠ΅λ‹ˆλ‹€.

  • λ°”λ””: μš”μ²­μ΄λ‚˜ 응닡에 λŒ€ν•œ λ³Έλ¬Έ 데이터가 ν¬ν•¨λ©λ‹ˆλ‹€. μš”μ²­ λ°”λ””λŠ” POSTλ‚˜ PUT λ©”μ„œλ“œμ™€ 같이 데이터λ₯Ό 전솑해야 ν•˜λŠ” κ²½μš°μ— μ‚¬μš©λ©λ‹ˆλ‹€. 응닡 λ°”λ””λŠ” μ„œλ²„μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈλ‘œ λ³΄λ‚΄λŠ” μ‹€μ œ 데이터가 ν¬ν•¨λ©λ‹ˆλ‹€.


πŸ“Œ HTTP μƒνƒœμ½”λ“œ

πŸ”₯λͺ¨μ˜ λ©΄μ ‘ λ•Œ μ§ˆλ¬Έλ°›μ•˜λ˜ λΆ€λΆ„μœΌλ‘œ μ•Œκ³  있으면 쒋을 λ“―πŸ”₯

HTTP μƒνƒœ μ½”λ“œ(HTTP Status Code)λŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ— λŒ€ν•œ μ„œλ²„μ—μ„œ μ„€μ •ν•΄μ£ΌλŠ” 응닡(Response) 정보이닀.

ν”„λ‘ νŠΈμ—”λ“œ κ°œλ°œμžμ—κ²Œ 이 μƒνƒœμ½”λ“œκ°€ μ€‘μš”ν•œ μ΄μœ λŠ” 이 μ½”λ“œλ₯Ό 보고 μ—λŸ¬ 처리λ₯Ό ν•  수 있기 λ•Œλ¬Έμ΄λ‹€. μ£Όμš” μƒνƒœ μ½”λ“œλŠ” 200λ²ˆλŒ€λΆ€ν„° 500λ²ˆλŒ€κΉŒμ§€ λ‹€μ–‘ν•˜κ²Œ μžˆμ–΄μ„œ κ°„λ‹¨ν•˜κ²Œλ‚˜λ§ˆ 이 μ½”λ“œκ°€ μ˜λ―Έν•˜λŠ” λ°”λ₯Ό μ•Œκ³  있으면 도움이 λœλ‹€.

1xx: Informational : μš”μ²­ 정보 처리 쀑
2xx: Success : μš”μ²­μ„ μ •μƒμ μœΌλ‘œ μ²˜λ¦¬ν•¨
3xx: Redirection : μš”μ²­μ„ μ™„λ£Œν•˜κΈ° μœ„ν•΄ μΆ”κ°€ λ™μž‘ ν•„μš”
4xx: Client Error : μ„œλ²„κ°€ μš”μ²­μ„ μ΄ν•΄ν•˜μ§€ λͺ»ν•¨
5xx: Server Error : μ„œλ²„κ°€ μš”μ²­ 처리 μ‹€νŒ¨ν•¨

200λ²ˆλŒ€: 성곡

  • 200 : GET μš”μ²­μ— λŒ€ν•œ 성곡
  • 201: μ •μƒμ μœΌλ‘œ 생성이 λ˜μ—ˆλ‹€λŠ”κ±Έ μ„œλ²„μ—μ„œ μ•Œλ €μ€Œ (νšŒμ›κ°€μž… λ“±μ˜ κΈ°λŠ₯μ—μ„œ μ‚¬μš©)
  • 204 : No Content. μ„±κ³΅ν–ˆμœΌλ‚˜ 응닡 본문에 데이터가 μ—†μŒ
  • 205 : Reset Content. μ„±κ³΅ν–ˆμœΌλ‚˜ ν΄λΌμ΄μ–ΈνŠΈμ˜ 화면을 μƒˆλ‘œ κ³ μΉ¨ν•˜λ„λ‘ ꢌ고
  • 206 : Partial Conent. μ„±κ³΅ν–ˆμœΌλ‚˜ 일뢀 λ²”μœ„μ˜ λ°μ΄ν„°λ§Œ λ°˜ν™˜

300λ²ˆλŒ€: λ¦¬λ‹€μ΄λ ‰μ…˜

300λ²ˆλŒ€μ˜ μƒνƒœ μ½”λ“œλŠ” λŒ€λΆ€λΆ„ ν΄λΌμ΄μ–ΈνŠΈκ°€ 이전 μ£Όμ†Œλ‘œ 데이터λ₯Ό μš”μ²­ν•˜μ—¬ μ„œλ²„μ—μ„œ μƒˆ URL둜 λ¦¬λ‹€μ΄λ ‰νŠΈλ₯Ό μœ λ„ν•˜λŠ” κ²½μš°μ΄λ‹€.

  • 301 : Moved Permanently, μš”μ²­ν•œ μžμ›μ΄ μƒˆ URL에 쑴재
  • 303 : See Other, μš”μ²­ν•œ μžμ›μ΄ μž„μ‹œ μ£Όμ†Œμ— 쑴재
  • 304 : Not Modified, μš”μ²­ν•œ μžμ›μ΄ λ³€κ²½λ˜μ§€ μ•Šμ•˜μœΌλ―€λ‘œ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μΊμ‹±λœ μžμ›μ„ μ‚¬μš©ν•˜λ„λ‘ ꢌ고. ETag와 같은 정보λ₯Ό ν™œμš©ν•˜μ—¬ λ³€κ²½ μ—¬λΆ€λ₯Ό 확인

400λ²ˆλŒ€: ν΄λΌμ΄μ–ΈνŠΈ μ—λŸ¬

400λ²ˆλŒ€ μƒνƒœ μ½”λ“œλŠ” λŒ€λΆ€λΆ„ ν΄λΌμ΄μ–ΈνŠΈμ˜ μ½”λ“œκ°€ 잘λͺ»λœ κ²½μš°μ΄λ‹€. μœ νš¨ν•˜μ§€ μ•Šμ€ μžμ›μ„ μš”μ²­ν–ˆκ±°λ‚˜ μš”μ²­μ΄λ‚˜ κΆŒν•œμ΄ 잘λͺ»λœ 경우 λ°œμƒν•˜λŠ”λ°, κ°€μž₯ μ΅μˆ™ν•œ μƒνƒœ μ½”λ“œλŠ” 404 μ½”λ“œμ΄λ‹€. μš”μ²­ν•œ μžμ›μ΄ μ„œλ²„μ— μ—†λ‹€λŠ” 의미λ₯Ό λ§ν•œλ‹€.

  • 400 : Bad Request, 잘λͺ»λœ μš”μ²­
  • 401 : Unauthorized, κΆŒν•œ 없이 μš”μ²­. Authorization 헀더가 잘λͺ»λœ 경우
  • 403 : Forbidden, μ„œλ²„μ—μ„œ ν•΄λ‹Ή μžμ›μ— λŒ€ν•΄ μ ‘κ·Ό κΈˆμ§€
  • 404 : Not Found, μš”μ²­ν•œ μžμ›μ΄ μ„œλ²„μ— μ‘΄μž¬ν•˜μ§€ μ•ŠμŒ. μ—†λŠ” url ν˜Ήμ€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” apiλ₯Ό 가지고 μš”μ²­ν–ˆμ„λ•Œ
  • 405 : Method Not Allowed, ν—ˆμš©λ˜μ§€ μ•Šμ€ μš”μ²­ λ©”μ„œλ“œ
  • 409 : Conflict, μ΅œμ‹  μžμ›μ΄ μ•„λ‹Œλ° μ—…λ°μ΄νŠΈν•˜λŠ” 경우. ex) 파일 μ—…λ‘œλ“œ μ‹œ 버전 좩돌

500λ²ˆλŒ€: μ„œλ²„ μ—λŸ¬

  • 501 : Not Implemented, μš”μ²­ν•œ λ™μž‘μ— λŒ€ν•΄ μ„œλ²„κ°€ μˆ˜ν–‰ν•  수 μ—†λŠ” 경우
  • 503 : Service Unavailable, μ„œλ²„κ°€ κ³ΌλΆ€ν•˜ λ˜λŠ” μœ μ§€ 보수둜 λ‚΄λ €κ°„ 경우
profile
🌱

0개의 λŒ“κΈ€