[HTTP] HTTP λ©”μ‹œμ§€ πŸ’¬

Ko SeoyoungΒ·2021λ…„ 5μ›” 24일
0

1. λ©”μ‹œμ§€μ˜ 흐름

  • μΈλ°”μš΄λ“œ, μ•„μ›ƒλ°”μš΄λ“œ, μ—…μŠ€νŠΈλ¦Ό, λ‹€μš΄μŠ€νŠΈλ¦Ό

μΈλ°”μš΄λ“œ & μ•„μ›ƒλ°”μš΄λ“œ

"λ©”μ‹œμ§€λŠ” 원 μ„œλ²„ λ°©ν–₯을 μΈλ°”μš΄λ“œλ‘œ ν•˜μ—¬ μ†‘μ‹ λœλ‹€"

  • HTTPλŠ” μΈλ°”μš΄λ“œμ™€ μ•„μ›ƒλ°”μš΄λ“œλΌλŠ” μš©μ–΄λ₯Ό νŠΈλžœμž­μ…˜ λ°©ν–₯으둜 ν‘œν˜„ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•œλ‹€.
  • μΈλ°”μš΄λ“œλ‘œ μ΄λ™ν•œλ‹€ == λ©”μ‹œμ§€κ°€ μ›μ„œλ²„ λ°©ν–₯으둜 ν–₯ν•œλ‹€.
  • μ•„μ›ƒλ°”μš΄λ“œλ‘œ μ΄λ™ν•œλ‹€ == (λͺ¨λ“  μ²˜λ¦¬κ°€ λλ‚œ λ’€) λ©”μ‹œμ§€κ°€ μ‚¬μš©μž μ—μ΄μ „νŠΈλ‘œ λŒμ•„μ˜€λŠ” 것

λ‹€μš΄μŠ€νŠΈλ¦Ό & μ—…μŠ€νŠΈλ¦Ό

" λ‹€μš΄μŠ€νŠΈλ¦ΌμœΌλ‘œ 흐λ₯΄λŠ” λ©”μ‹œμ§€ "

  • λ‹€μš΄μŠ€νŠΈλ¦Όκ³Ό μ—…μŠ€νŠΈλ¦Όμ΄λž€ μš©μ–΄λŠ” λ°œμ†‘μžμ™€ μˆ˜μ‹ μžμ— λŒ€ν•œκ²ƒμ΄λ‹€.
  • HTTPλŠ” κ°•λ¬Όκ³Ό 같이 흐λ₯Έλ‹€. λͺ¨λ“  λ©”μ‹œμ§€λŠ” μš”μ²­ λ˜λŠ” 응닡 λ©”μ‹œμ§€λƒμ— 관계없이 λ‹€μš΄μŠ€νŠΈλ¦ΌμœΌλ‘œ 흐λ₯Έλ‹€.
  • λ©”μ‹œμ§€μ˜ λ°œμ†‘μžλŠ” μˆ˜μ‹ μžμ˜ μ—…μŠ€νŠΈλ¦Όμ΄λ‹€.

(μš”μ²­μ—μ„œλŠ” ν”„λ½μ‹œ 1이 ν”„λ½μ‹œ 3의 μ—…μŠ€νŠΈλ¦Όμ΄μ§€λ§Œ, μ‘λ‹΅μ—μ„œλŠ” ν”„λ½μ‹œ 3이 ν”„λ½μ‹œ 1의 μ—…μŠ€νŠΈλ¦Όμ΄ 될 μˆ˜λ„ μžˆλ‹€.)

2. λ©”μ‹œμ§€μ˜ 각 λΆ€λΆ„

HTTP λ©”μ‹œμ§€λŠ” λ‹¨μˆœν•œ, λ°μ΄ν„°μ˜ κ΅¬μ‘°ν™”λœ 블둝

각 λ©”μ‹œμ§€λŠ” ν΄λΌμ΄μ–ΈνŠΈλ‘œλΆ€ν„° μš”μ²­μ΄λ‚˜ μ„œλ²„λ‘œλΆ€ν„°μ˜ 응닡 쀑 ν•˜λ‚˜λ₯Ό ν¬ν•¨ν•œλ‹€.

λ©”μ‹œμ§€μ˜ ꡬ성

  • λ©”μ‹œμ§€λŠ” μ‹œμž‘μ€„, 헀더블둝, λ³Έλ¬Έ 3가지 파트둜 κ΅¬μ„±λœλ‹€.
  • μ‹œμž‘μ€„: 이것이 μ–΄λ–€ λ©”μ‹œμ§€μΈμ§€ μ„œμˆ 
  • 헀더블둝: λ©”μ‹œμ§€μ˜ 속성을 λ‹΄κ³  있음
Content-type: text/plain # 본문이 무엇인지 λ§ν•΄μ€Œ
Content-length: 19 # 본문의 크기: 19byte
  • λ³Έλ¬Έ: 선택적인 데이터 덩어리 (optional ν•œ λΆ€λΆ„)

μ‹œμž‘μ€„ & 헀더블둝 β†’ 쀄 λ‹¨μœ„λ‘œ λΆ„λ¦¬λœ μ•„μŠ€ν‚€ λ¬Έμžμ—΄
(각 쀄은 캐리지리턴(ACSII 13) & κ°œν–‰λ¬Έμž(ACSII 10)둜 κ΅¬μ„±λœ 두 κΈ€μžμ˜ μ€„λ°”κΏˆ λ¬Έμžμ—΄(CRLF)둜 λλ‚œλ‹€)

λ³Έλ¬Έ β†’ μ‹œμž‘μ€„, 헀더블둝과 달리 본문은 ν…μŠ€νŠΈμ™€ 이진데이터(ex) μ΄λ―Έμ§€λ‚˜ λ™μ˜μƒ)λ₯Ό 포함할 수 있고, κ·Έλƒ₯ λΉ„μ–΄μžˆμ„ μˆ˜λ„ 있음

2.1 λ©”μ‹œμ§€ 문법

λͺ¨λ“  HTTP λ©”μ‹œμ§€

  • μš”μ²­: μ›Ή μ„œλ²„μ— μ–΄λ–€ λ™μž‘μ„ μš”κ΅¬

  • 응닡: μš”μ²­μ˜ μˆ˜ν–‰ κ²°κ³Όλ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 돌렀쀌 (μƒνƒœμ •λ³΄μ™€ κ²°κ³Ό 데이터 λ“±)

    β‡’ λ‘˜λ‹€ 기본적 ꡬ쑰가 κ°™μŒ!

μš”μ²­/응닡 λ©”μ‹œμ§€ ν˜•μ‹

  • μš”μ²­
<λ©”μ„œλ“œ> <μš”μ²­ Url> <버전>
<헀더>

<μ—”ν„°ν‹° λ³Έλ¬Έ>
  • 응닡
<버전> <μƒνƒœ μ½”λ“œ> <μ‚¬μœ  ꡬ절>
<헀더>

<μ—”ν„°ν‹° λ³Έλ¬Έ>

2.2 μ‹œμž‘μ€„

μš”μ²­: <λ©”μ„œλ“œ> <μš”μ²­ URL> <버전>  (곡백으둜 ꡬ뢄)
  • μ„œλ²„μ—κ²Œ λ¦¬μ†ŒμŠ€μ— λŒ€ν•΄ 무언가λ₯Ό 해달라고 뢀탁
  • λ©”μ„œλ“œ: ν΄λΌμ΄μ–ΈνŠΈ μΈ‘μ—μ„œ μ„œλ²„κ°€ λ¦¬μ†ŒμŠ€μ— λŒ€ν•΄ μˆ˜ν–‰ν•΄μ£ΌκΈ° λ°”λΌλŠ” λ™μž‘ (μ–΄λ–€ λ™μž‘μ΄ μΌμ–΄λ‚˜μ•Ό ν•˜λŠ”μ§€ μ„€λͺ…ν•΄μ£ΌλŠ” λ©”μ„œλ“œ)

  • μš”μ²­ URL: μš”μ²­ λŒ€μƒμ΄ λ˜λŠ” λ¦¬μ†ŒμŠ€λ₯Ό μ§€μΉ­ν•˜λŠ” μ™„μ „ν•œ URL ν˜Ήμ€ URL의 경둜 ꡬ성 μš”μ†Œ

    (λ¦¬μ†ŒμŠ€λ₯Ό κ°€λ¦¬ν‚€λŠ” μ ˆλŒ€ 경둜이기만 ν•˜λ©΄ λŒ€μ²΄λ‘œ 문제 x, ex) /item/list.txt )

  • 버전: 이 λ©”μ‹œμ§€μ—μ„œ μ‚¬μš©μ€‘μΈ HTTP의 버전

    ν˜•μ‹: HTTP/<메이저>.<λ§ˆμ΄λ„ˆ> β†’ ex) HTTP/1.0

응닡: <버전> <μƒνƒœμ½”λ“œ> <μ‚¬μœ κ΅¬μ ˆ>
  • μˆ˜ν–‰ 결과에 λŒ€ν•œ μƒνƒœ 정보와 결과데이터λ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ λŒλ €μ€€λ‹€

  • μƒνƒœμ½”λ“œ: μš”μ²­μ€‘μ— 무엇이 μΌμ–΄λ‚¬λŠ”μ§€ μ„€λͺ…ν•˜λŠ” μ„Έμžλ¦¬ 숫자, κ°μ½”λ“œμ˜ 첫번째 μžλ¦¬μˆ˜λŠ” μƒνƒœμ˜ 일반적인 λΆ„λ₯˜(성곡, μ—λŸ¬ λ“±)λ₯Ό λ‚˜νƒ€λ‚Έλ‹€.

    λŒ€ν‘œμ μΈ μƒνƒœμ½”λ“œ: 200(OK), 401(Unauthorized), 404(Not Found)

  • μ‚¬μœ κ΅¬μ ˆ: 숫자둜된 μƒνƒœμ½”λ“œλ₯Ό μ‚¬λžŒμ΄ 이해할 수 있게 μ„€λͺ…ν•΄μ£ΌλŠ” 짧은 문ꡬ (단지 이 λͺ©μ λΏ)

2.3 헀더

  • μ‹œμž‘μ€„ λ‹€μŒμœΌλ‘œ 0개, 1개 λ˜λŠ” μ—¬λŸ¬κ°œμ˜ 헀더듀, ν•΄λ”μ˜ λͺ©λ‘μ€ λΉˆμ€„(CRLF)둜 λλ‚˜ 헀더 λͺ©λ‘μ˜ 끝과 μ—”ν„°ν‹° 본문의 μ‹œμž‘μ„ ν‘œμ‹œν•œλ‹€.

  • HTTP ν—€λ”ν•„λ“œ: μš”μ²­ & μ‘λŒ­ λ©”μ‹œμ§€μ— 좔가정보λ₯Ό λ”ν•œλ‹€. (이름/κ°’ 쌍의 λͺ©λ‘)

  • HTTP/1.1 κ³Ό 같은 λͺ‡λͺ‡ λ²„μ „μ˜ HTTPλŠ” μš”μ²­μ΄λ‚˜ 응닡에 μ–΄λ–€ νŠΉμ • 헀더가 ν¬ν•¨λ˜μ–΄μ•Όλ§Œ μœ νš¨ν•œ κ²ƒμœΌλ‘œ κ°„μ£Ό

  • 헀더 λΆ„λ₯˜:
    - 일반 헀더: μš”μ²­ & 응닡 μ–‘μͺ½ λͺ¨λ‘μ— λ‚˜νƒ€λ‚Ό 수 있음
    - μš”μ²­ 헀더: μš”μ²­μ— λŒ€ν•œ 뢀가정보 제곡
    - 응닡 헀더: 응닡에 λŒ€ν•œ 뢀가정보 제곡
    - Entity 헀더: λ³Έλ¬Έ 크기 & μ½˜ν…μΈ , λ¦¬μ†ŒμŠ€ κ·Έ 자체λ₯Ό μ„œμˆ 
    - ν™•μž₯ 헀더: λͺ…세에 μ •μ˜λ˜μ§€ μ•Šμ€ μƒˆλ‘œμš΄ 헀더

  • ν—€λ”μ˜ κ°„λ‹¨ν•œ 문법: 이름, 콜둠(:), 선택적인 곡백, ν•„λ“œκ°’, CRLF(λΉˆμ€„)κ°€ μˆœμ„œλŒ€λ‘œ λ‚˜νƒ€λ‚œλ‹€.

2.4 μ—”ν‹°ν‹° λ³Έλ¬Έ

  • optional, λ©”μ‹œμ§€μ˜ ν™”λ¬Ό (이것듀을 HTTPκ°€ μˆ˜μ†‘ν•˜λ„λ‘ μ„€κ³„λœ 것)
  • 이미지, λΉ„λ””μ˜€, HTML λ¬Έμ„œ, SW μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜, μ‹ μš©μΉ΄λ“œ νŠΈλžœμž­μ…˜, μ „μž 우편 λ“± μ—¬λŸ¬ μ’…λ₯˜μ˜ 디지털 데이터λ₯Ό μ‹€μ–΄λ‚˜λ₯Ό 수 μžˆλ‹€

2.5 버전 0.9 λ©”μ‹œμ§€

HTTP 버전 0.9λŠ” HTTP ν”„λ‘œν† μ½œμ˜ μ΄ˆκΈ°λ²„μ „μœΌλ‘œ μ˜€λŠ˜λ‚  HTTP μš”μ²­, 응닡 보닀 훨씬 λ‹¨μˆœν•˜λ‹€

  • μš”μ²­: λ©”μ„œλ“œ, μš”μ²­ URL
  • 응닡: μ•€ν„°ν‹° (μƒνƒœμ½”λ“œ, μ‚¬μœ κ΅¬μ ˆ x)

3. λ©”μ„œλ“œ

3.1. μ•ˆμ „ν•œ λ©”μ„œλ“œ

μ•ˆμ „ν•œ λ©”μ„œλ“œλž€ HTTP μš”μ²­κ²°κ³Ό μ„œλ²„μ— μ–΄λ–€ μž‘μš©λ„ μ—†λŠ” λ©”μ„œλ“œλ‘œ GETμ΄λ‚˜ HEAD와 같은 λ©”μ„œλ“œλ₯Ό λ§ν•œλ‹€.

  • μž‘μš©μ΄ μ—†λ‹€λŠ” 것은 HTTP μš”μ²­ 결과둜 인해 μ„œλ²„μ—μ„œ μΌμ–΄λ‚˜λŠ” 일은 아무것도 μ—†λ‹€λŠ” 것이닀. (ex) μ–΄λ–€ μ›Ήμ‚¬μ΄νŠΈμ—μ„œ ꡬ맀λ₯Ό ν•œ 경우 μ‹ μš©μΉ΄λ“œ λŒ€κΈˆμ΄ μ²­κ΅¬λ˜λŠ”λ° μ΄λŠ” μž‘μš©μ΄ μžˆλŠ”κ²ƒμ΄λ‹€)

3.2. GET

κ°€μž₯ ν”νžˆ μ“°μ΄λŠ” λ©”μ„œλ“œλ‘œ 주둜 μ„œλ²„μ—κ²Œ λ¦¬μ†ŒμŠ€λ₯Ό 달라고 μš”μ²­ν•˜κΈ° μœ„ν•΄ 쓰인닀

3.3 HEAD

HEADλ©”μ„œλ“œλŠ” μ •ν™•νžˆ GET처럼 ν–‰λ™ν•˜μ§€λ§Œ, μ„œλ²„λŠ” μ‘λ‹΅μœΌλ‘œ ν—€λ”λ§Œμ„ λŒλ €μ€€λ‹€. 즉, μ—”ν‹°ν‹° 본문은 λ°˜ν™˜λ˜μ§€ μ•ŠλŠ”λ‹€.

HEADλŠ” λ¦¬μ†ŒμŠ€κ°€ μ•„λ‹Œ 헀더에 λŒ€ν•œ 정보(ex) λ¬Έμ„œ νƒ€μž…) 등이 κΆκΈˆν•  λ•Œ μ‚¬μš©λœλ‹€. λ˜λŠ” μ‘λ‹΅μ˜ μƒνƒœμ½”λ“œλ₯Ό 톡해 개체의 쑴재 유무λ₯Ό 확인할 μˆ˜λ„ μžˆλ‹€.

3.4 PUT

GET λ©”μ„œλ“œκ°€ μ„œλ²„λ‘œλΆ€ν„° λ¬Έμ„œλ₯Ό 읽어 λ“€μ΄λŠ”λ° λ°˜ν•΄ PUT λ©”μ„œλ“œλŠ” μ„œλ²„μ— λ¬Έμ„œλ₯Ό μ“΄λ‹€.
μ–΄λ–€ λ°œν–‰ μ‹œμŠ€ν…œμ€ μ‚¬μš©μžκ°€ PUT을 μ΄μš©ν•΄ μ›ΉνŽ˜μ΄μ§€λ₯Ό λ§Œλ“€κ³  μ›Ήμ„œλ²„μ— 직접 κ²Œμ‹œν•  수 μžˆλ„λ‘ ν•΄μ€€λ‹€.

PUT λ©”μ„œλ“œμ˜ μ˜λ―ΈλŠ”, μ„œλ²„κ°€ μš”μ²­μ˜ 본문을 가지고 μš”μ²­ URL의 μ΄λ¦„λŒ€λ‘œ μƒˆ λ¬Έμ„œλ₯Ό λ§Œλ“€κ±°λ‚˜, 이미 URL이 μ‘΄μž¬ν•œλ‹€λ©΄ 본문을 μ‚¬μš©ν•΄μ„œ κ΅μ²΄ν•˜λŠ” 것이닀. PUT은 μ½˜ν…μΈ λ₯Ό λ³€κ²½ν•  수 있게 ν•΄μ£ΌκΈ° λ•Œλ¬Έμ—, λ§Žμ€ μ›Ή μ„œλ²„κ°€ PUT을 μˆ˜ν–‰ν•˜κΈ° 전에 둜그인과 같은 μ‚¬μš©μž 인증을 κ±°μΉœλ‹€

3.5 POST

POST λ©”μ„œλ“œλŠ” μ„œλ²„μ— μž…λ ₯ 데이터λ₯Ό μ „μ†‘ν•˜κΈ° μœ„ν•΄ 섀계 λ˜μ—ˆλ‹€.
주둜 HTML Form을 μ§€μ›ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λœλ‹€. μ±„μ›Œμ§„ 폼에 λ‹΄κΈ΄ λ°μ΄ν„°λŠ” μ„œλ²„λ‘œ μ „μ†‘λ˜κ³ , μ„œλ²„λŠ” 이λ₯Ό λͺ¨μ•„μ„œ ν•„μš”λ‘œ ν•˜λŠ” κ³³(ex) 데이터λ₯Ό μ²˜λ¦¬ν•  μ„œλ²„ κ²Œμ΄νŠΈμ›¨μ΄ ν”„λ‘œκ·Έλž¨)에 보낸닀.

(POST - μ„œλ²„μ— 데이터λ₯Ό 보내기 μœ„ν•΄ μ‚¬μš©, PUT - μ„œλ²„μ— μžˆλŠ” λ¦¬μ†ŒμŠ€(ex) 파일)에 데이터λ₯Ό μž…λ ₯ν•˜κΈ° μœ„ν•΄ μ‚¬μš©)

3.6 TRACE

ν΄λΌμ΄μ–ΈνŠΈκ°€ μ–΄λ–€ μš”μ²­μ„ ν•  λ•Œ, κ·Έ μš”μ²­μ€ λ°©ν™”λ²½, ν”„λ½μ‹œ, κ²Œμ΄νŠΈμ›¨μ΄ λ“±μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 톡과할 수 μžˆλ‹€. μ΄λ“€μ—κ²ŒλŠ” μ›λž˜μ˜ HTTP μš”μ²­μ„ μˆ˜μ •ν•  수 μžˆλŠ” κΈ°νšŒκ°€ μžˆλŠ”λ°, TRACE λ©”μ„œλ“œλŠ” ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μžμ‹ μ˜ μš”μ²­μ΄ μ„œλ²„μ— λ„λ‹¬ν–ˆμ„ λ•Œ μ–΄λ–»κ²Œ 보이게 λ˜λŠ”μ§€ μ•Œλ €μ€€λ‹€.

  • TRACEλŠ” 주둜 진단을 μœ„ν•΄ μ‚¬μš©λœλ‹€ (ex) μš”μ²­μ΄ μ˜λ„ν•œ μš”μ²­/응닡 연쇄λ₯Ό κ±°μ³κ°€λŠ”μ§€ 검사)

3.7 OPTIONS

OPTIONS λ©”μ„œλ“œλŠ” μ›Ή μ„œλ²„μ—κ²Œ μ—¬λŸ¬κ°€μ§€ μ’…λ₯˜μ˜ 지원 λ²”μœ„μ— λŒ€ν•΄ λ¬Όμ–΄λ³Έλ‹€. μ„œλ²„μ—κ²Œ νŠΉμ • λ¦¬μ†ŒμŠ€μ— λŒ€ν•΄ μ–΄λ–€ λ©”μ„œλ“œκ°€ μ§€μ›λ˜λŠ”μ§€ λ¬Όμ–΄λ³Ό 수 μžˆλ‹€. (ex) 응닡 λ©”μ‹œμ§€: 'Allow: GET, PUT, POST')

3.8 DELETE

DELETE λ©”μ„œλ“œλŠ” μ„œλ²„μ—κ²Œ μš”μ²­ URL둜 μ§€μ •ν•œ λ¦¬μ†ŒμŠ€λ₯Ό μ‚­μ œν•  것을 μš”μ²­ν•œλ‹€.
(κ·ΈλŸ¬λ‚˜ ν΄λΌμ΄μ–ΈνŠΈλŠ” μ‚­μ œκ°€ μˆ˜ν–‰λ˜λŠ” 것을 보μž₯ν•˜μ§€ λͺ»ν•œλ‹€. μ™œλƒν•˜λ©΄ HTTP λͺ…μ„ΈλŠ” μ„œλ²„ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ•Œλ¦¬μ§€ μ•Šκ³  μš”μ²­μ„ λ¬΄μ‹œν•˜λŠ” 것을 ν—ˆμš©ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.)

μƒνƒœμ½”λ“œ


참고자료

HTTP μ™„λ²½κ°€μ΄λ“œ

profile
Web Frontend Developer πŸ‘©πŸ»β€πŸ’» #React #Nextjs #ApolloClient

0개의 λŒ“κΈ€