HTTP

1. HTTP Messages

μ •μ˜

  • ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ μ‚¬μ΄μ—μ„œ 데이터가 κ΅ν™˜λ˜λŠ” 방식

  • μš”μ²­κ³Ό 응닡은 μ•„λž˜μ™€ 같이 μœ μ‚¬ν•œ ꡬ쑰λ₯Ό κ°€μ§€λ©°, start lineκ³Ό HTTP headersλ₯Ό λ¬Άμ–΄ μš”μ²­μ΄λ‚˜ μ‘λ‹΅μ˜ head라고 ν•˜λ©°, PayloadλŠ” body라고 함

ꡬ쑰

http_message
  • start line: μš”μ²­μ΄λ‚˜ μ‘λ‹΅μ˜ μƒνƒœλ₯Ό λ‚˜νƒ€λ‚΄λ©°, 항상 첫 번째 쀄에 μœ„μΉ˜ν•˜κ³ , μ‘λ‹΅μ—μ„œλŠ” status line이라 뢀름

  • HTTP headers: μš”μ²­μ„ μ§€μ •ν•˜κ±°λ‚˜, λ©”μ‹œμ§€μ— ν¬ν•¨λœ 본문을 μ„€λͺ…ν•˜λŠ” ν—€λ”μ˜ μ§‘ν•©

  • empty line: 헀더와 본문을 κ΅¬λΆ„ν•˜λŠ” 빈 쀄

  • body: μš”μ²­κ³Ό κ΄€λ ¨λœ λ°μ΄ν„°λ‚˜ 응닡과 관련덴 데이터 λ˜λŠ” λ¬Έμ„œ 포함, μœ ν˜•μ— 따라 선택적 μ‚¬μš©

2. HTTP Requests

ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ—κ²Œ λ³΄λ‚΄λŠ” λ©”μ‹œμ§€

start line의 μ„Έ κ°€μ§€ μš”μ†Œ

  • μˆ˜ν–‰ν•  μž‘μ—…μ΄λ‚˜ 방식을 μ„€λͺ…ν•˜λŠ” HTTP method

  • μš”μ²­ λŒ€μƒ λ˜λŠ” ν”„λ‘œν† μ½œ, 포트, λ„λ©”μΈμ˜ μ ˆλŒ€κ²½λ‘œλŠ” μš”μ²­ μ»¨ν…μŠ€νŠΈμ— μž‘μ„±λ¨

Headers

  • 헀더이름, 콜둠, 값을 μž…λ ₯

  • General headers

  • Request headers

  • Representation headers

Body

  • λͺ¨λ“  μš”μ²­μ— ν•„μš”ν•˜μ§„ μ•ŠμŒ

  • Single-resource bodies(단일-λ¦¬μ†ŒμŠ€ λ³Έλ¬Έ)

  • Multiple-resource bodies(닀쀑-λ¦¬μ†ŒμŠ€ λ³Έλ¬Έ)

3. HTTP Responses

μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ λ³΄λ‚΄λŠ” λ©”μ‹œμ§€

Status line

  • ν˜„μž¬ ν”„λ‘œν† μ½œμ˜ 버전(HTTP/1.1)

  • μƒνƒœ μ½”λ“œ: μš”μ²­μ˜ κ²°κ³Ό (ex. 200, 302, 404 λ“±)

  • μƒνƒœ ν…μŠ€νŠΈ: μƒνƒœ μ½”λ“œμ— λŒ€ν•œ μ„€λͺ…

  • μš”μ²­ 헀더와 λ™μΌν•œ ꡬ쑰

4. Stateful vs. Stateless

Stateful(μƒνƒœ μœ μ§€)

  • 항상 같은 μ„œλ²„κ°€ μœ μ§€λ˜μ–΄μ•Ό 함

  • μ„œλ²„μ— μž₯μ• κ°€ 생긴닀면 μœ μ§€λ˜λ˜ μƒνƒœμ •λ³΄κ°€ λ‚ μ•„κ°€ λ²„λ¦¬λ―€λ‘œ μ²˜μŒλΆ€ν„° λ‹€μ‹œ μ„œλ²„μ— μš”μ²­ν•΄μ•Ό 함

Stateless(λ¬΄μƒνƒœ)

  • ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­μ‹œ 이미 ν•„μš”ν•œ 데이터λ₯Ό λ‹€ λ‹΄μ•„μ„œ 보내기에 아무 μ„œλ²„λ‚˜ ν˜ΈμΆœν•΄λ„ 됨

  • ν•œ μ„œλ²„μ— μž₯μ• κ°€ 생기더라도 λ‹€λ₯Έ μ„œλ²„μ—μ„œ 응닡을 μ „λ‹¬ν•˜λ©΄ λ˜λ―€λ‘œ ν΄λΌμ΄μ–ΈνŠΈλŠ” λ‹€μ‹œ μš”μ²­ν•  ν•„μš” μ—†μŒ

  • μ‘λ‹΅μ„œλ²„λ₯Ό μ‰½κ²Œ λ°”κΏ€ 수 μžˆκΈ°μ— λ¬΄ν•œν•œ μ„œλ²„ 증섀 κ°€λŠ₯

  • λ‹€λ§Œ, λͺ¨λ“  것을 λ¬΄μƒνƒœλ‘œ 섀계할 μˆ˜λ„ 있고, ν•  수 μ—†λŠ” κ²½μš°λ„ 있음 (e.g. 둜그인이 ν•„μš” μ—†λŠ” λ‹¨μˆœ μ„œλΉ„μŠ€ μ†Œκ°œ ν™”λ©΄μ˜ 경우 λ¬΄μƒνƒœλ‘œ 섀계 κ°€λŠ₯ν•˜λ‚˜, 둜그인이 ν•„μš”ν•œ μ„œλΉ„μŠ€λΌλ©΄ μœ μ €μ˜ μƒνƒœλ₯Ό μœ μ§€ν•΄μ•Ό ν•˜κΈ°μ— λΈŒλΌμš°μ € μΏ ν‚€, μ„Έμ…˜, 토큰 λ“±μœΌλ‘œ μƒνƒœ μœ μ§€)

5. Connection Oriented vs. Connectionless

Connection Oriented

  • 연결을 μœ μ§€ν•˜λŠ” λͺ¨λΈ

  • ν΄λΌμ΄μ–ΈνŠΈλ“€μ΄ μš”μ²­μ„ 보내지 μ•Šλ”λΌλ„ 계속 연결을 μœ μ§€ν•΄μ•Ό ν•˜λ―€λ‘œ μ„œλ²„μ˜ μžμ›μ΄ μ†Œλͺ¨λ¨

Connectionless

  • 연결을 μœ μ§€ν•˜μ§€ μ•ŠλŠ” λͺ¨λΈ

  • μ‹€μ œ μš”μ²­μ„ μ£Όκ³  받을 λ•Œλ§Œ 연결을 μœ μ§€ν•˜κ³ , 응닡을 μ£Όκ³  λ‚˜λ©΄ TCP/IP 연결을 λŠκΈ°μ— μ΅œμ†Œν•œμ˜ μ„œλ²„ μžμ› μ‚¬μš©

6. HTTP의 νŠΉμ§•

HTTP 1.0

  • HTTPλŠ” 기본적으둜 연결을 μœ μ§€ν•˜μ§€ μ•ŠλŠ” λͺ¨λΈ

  • 일반적으둜 초 λ‹¨μœ„ μ΄ν•˜μ˜ λΉ λ₯Έ μ†λ„λ‘œ 응닡

  • 1μ‹œκ°„λ™μ•ˆ 수 천λͺ…이 μ„œλΉ„μŠ€λ₯Ό μ΄μš©ν•΄λ„ μ‹€μ œ μ„œλ²„μ—μ„œ λ™μ‹œμ— μ²˜λ¦¬ν•˜λŠ” μš”μ²­μ€ 수 μ‹­κ°œ μ΄ν•˜λ‘œ 맀우 적음

  • λ‹€λ§Œ, νŠΈλž˜ν”½μ΄ λ§Žμ€ 큰 μ„œλΉ„μŠ€μ—μ„œλŠ” 비연결성이 ν•œκ³„λ₯Ό λ³΄μž„

  • μžμ›λ“€μ„ 각각 보낼 λ•Œλ§ˆλ‹€ μ—°κ²° 끊고 λ‹€μ‹œ μ—°κ²°ν•˜κ³ λ₯Ό λ°˜λ³΅ν•˜λŠ” 것은 λΉ„νš¨μœ¨μ 

HTTP 지속 μ—°κ²°(Persistent Connections)

  • μœ„μ˜ 문제λ₯Ό ν•΄κ²°ν•˜μ—¬ HTTP2, 3μ—μ„œ 더 많이 μ΅œμ ν™”λ¨

  • 연결이 이루어지고 λ‚œ λ’€ 각각의 μžμ›λ“€μ„ μš”μ²­ν•˜κ³ , λͺ¨λ“  μžμ›μ— λŒ€ν•œ 응닡이 λŒμ•„μ˜¨ 후에 μ—°κ²° μ’…λ£Œν•˜κΈ°μ— μ‹œκ°„μ΄ κ°μ†Œ

7. HTTPS

μ˜λ―Έμ™€ νŠΉμ§•

  • HTTP Secure의 μ•½μžλ‘œ, HTTP ν”„λ‘œν† μ½œμ„ 더 μ•ˆμ „ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλ‹€λŠ” 의미

  • HTTPμ™€λŠ” 달리 μš”μ²­κ³Ό μ‘λ‹΅μœΌλ‘œ μ˜€κ°€λŠ” λ‚΄μš©μ„ μ•”ν˜Έν™”ν•˜κΈ° λ•Œλ¬Έ

  • λ”°λΌμ„œ 제 3μžκ°€ HTTPS μš”μ²­κ³Ό 응닡 데이터λ₯Ό νƒˆμ·¨ν•˜λ”λΌλ„ κ·Έ λ‚΄μš©μ„ μ•Œμ•„λ³Ό 수 μ—†μŒ

μ•”ν˜Έν™” 방식

λŒ€μΉ­ ν‚€ μ•”ν˜Έν™” 방식

  • ν•˜λ‚˜μ˜ ν‚€λ§Œ μ‚¬μš©ν•˜κΈ°μ—, μ•”ν˜Έν™”ν•  λ•Œ μ‚¬μš©ν•œ ν‚€λ‘œ λ³΅ν˜Έν™” κ°€λŠ₯

  • μ—°μ‚° 속도가 λΉ λ₯΄λ‹€λŠ” μž₯점이 μžˆμœΌλ‚˜, ν‚€λ₯Ό νƒˆμ·¨λ‹Ήν–ˆμ„ 경우 ν‚€ 관리에 신경을 써야 함

λΉ„λŒ€μΉ­ ν‚€ μ•”ν˜Έν™” 방식 (곡개 ν‚€ μ•”ν˜Έν™” 방식)

  • 두 개의 ν‚€(곡개 ν‚€, λΉ„λ°€ ν‚€)λ₯Ό μ‚¬μš©ν•˜κΈ°μ—, μ•”ν˜Έν™”ν•  λ•Œ μ‚¬μš©ν•œ 킀와 λ‹€λ₯Έ ν‚€λ‘œλ§Œ λ³΅ν˜Έν™” κ°€λŠ₯

  • 보톡 μš”μ²­μ„ λ³΄λ‚΄λŠ” μ‚¬μš©μžκ°€ 곡개 ν‚€λ₯Ό, μš”μ²­μ„ λ°›λŠ” μ„œλ²„κ°€ λΉ„λ°€ ν‚€λ₯Ό 가지기에 λΉ„λ°€ ν‚€λŠ” μ„œλ²„κ°€ ν•΄ν‚Ήλ‹Ήν•˜μ§€ μ•ŠλŠ” 이상 νƒˆμ·¨λ˜μ§€ μ•ŠμŒ

  • λ³΄μ•ˆμ„±μ΄ μ’‹μœΌλ‚˜ 더 λ³΅μž‘ν•œ 연산이 ν•„μš”ν•˜μ—¬ μ‹œκ°„μ΄ 더 μ†Œλͺ¨λ¨

8. SSL/TLS ν”„λ‘œν† μ½œ

  • HTTPSλŠ” HTTP 톡신을 ν•˜λŠ” μ†ŒμΌ“ λΆ€λΆ„μ—μ„œ SSL ν˜Ήμ€ TLS λΌλŠ” ν”„λ‘œν† μ½œλ‘œ μ„œλ²„ 인증과 데이터 μ•”ν˜Έν™”λ₯Ό μ§„ν–‰

  • SSL이 ν‘œμ€€ν™”λ˜λ©° 바뀐 이름이 TLSμ΄λ―€λ‘œ 사싀상 같은 ν”„λ‘œν† μ½œμž„

SSL/TLS의 νŠΉμ§•

  • CA(Certificate Authority)λ₯Ό ν†΅ν•œ μΈμ¦μ„œ μ‚¬μš©

  • λŒ€μΉ­ ν‚€, 곡개 ν‚€ μ•”ν˜Έν™” 방식을 λͺ¨λ‘ μ‚¬μš©

Last updated