7. HTTP 헀더 2 - μΊμ‹œμ™€ 쑰건뢀 μš”μ²­

2021. 1. 17. 19:43γ†πŸŒ Web

 

λ³Έ ν¬μŠ€νŒ…μ€ μš°μ•„ν•œ ν˜•μ œλ“€, κΉ€μ˜ν•œ λ‹˜μ˜ 'λͺ¨λ“  개발자λ₯Ό μœ„ν•œ HTTP μ›Ή κΈ°λ³Έ 지식' κ°•μ˜λ₯Ό μˆ˜κ°• ν›„ μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€.

 

 

 

1. μΊμ‹œ κΈ°λ³Έ λ™μž‘

-> μ•„λž˜μ™€ 같이 star 이미지λ₯Ό μš”μ²­ν•˜λ©΄ 1.1Mbyte μš©λŸ‰μ˜ 데이터가 μ „μ†‘λœλ‹€ (헀더 + 이미지 μš©λŸ‰).

-> μΊμ‹œκ°€ 없을 λ•Œ, λ‘λ²ˆμ§Έ μš”μ²­μ„ ν•œλ‹€λ©΄ λ˜‘κ°™μ΄ 1.1Mbyte μš©λŸ‰μ˜ 데이터가 μ „μ†‘λœλ‹€ (같은 μš”μ²­μ΄λ‹ˆ, 같은 μš©λŸ‰ 전솑)

 

2. μΊμ‹œκ°€ 없을 λ•Œ, 

-> μ„œλ²„μΈ‘μ˜ 데이터가 λ³€κ²½λ˜μ§€ μ•Šμ•„λ„ 계속 λ„€νŠΈμ›Œν¬λ₯Ό 톡해 데이터λ₯Ό λ‹€μš΄λ°›μ•„μ•Ό ν•œλ‹€.

-> 느리고 λΉ„μ‹Έλ©°, λΈŒλΌμš°μ € λ‘œλ”© 속도가 λŠλ¦¬λ‹€ = 느린 μ‚¬μš©μž κ²½ν—˜ (slow ux)

 

3. μΊμ‹œ μ μš©ν•  λ•Œ,

-> 1.1Mbyte의 데이터λ₯Ό μΊμ‹œ μ €μž₯μ†Œμ— μ €μž₯ν•œλ‹€.

-> λ‘λ²ˆμ§Έ μš”μ²­μ—μ„œ μ›Ή λΈŒλΌμš°μ €λŠ” λ„€νŠΈμ›Œν¬λ₯Ό 타지 μ•Šκ³ , λΈŒλΌμš°μ € μΊμ‹œμ—μ„œ 곧 λ°”λ‘œ 데이터λ₯Ό μ‘°νšŒν•  수 μžˆλ‹€.

4. Cache-control: Max-age = 60

-> 60초 λ™μ•ˆλ§Œ μœ νš¨ν•œ μΊμ‹œ.

-> 60초 이후 λΆ€ν„°λŠ”, μ„œλ²„μ—μ„œ μƒˆλ‘œ 데이터λ₯Ό 받아와 μΊμ‹œμ— μ €μž₯ν•΄μ•Όν•œλ‹€ (μΊμ‹œ κ°±μ‹ ).

-> server와 μΊμ‹œμ˜ 데이터가 λ‹€λ₯Έ κ²½μš°λ„ λ°œμƒν•  수 μžˆμŒμ„ μΈμ§€ν•˜μž (μ„œλ²„ λ°μ΄ν„°μ˜ μ—…λ°μ΄νŠΈ 경우)

 

5. μΊμ‹œ μ‹œκ°„ 초과일 λ•Œ, 

  • 1) μ„œλ²„μ—μ„œ κΈ°μ‘΄ 데이터λ₯Ό λ³€κ²½
  • 2) μ„œλ²„μ—μ„œ κΈ°μ‘΄ 데이터λ₯Ό λ³€κ²½ν•˜μ§€ μ•ŠμŒ -> μ‹œκ°„ 초과된 μΊμ‹œ 데이터와 μ„œλ²„ 데이터가 κ°™λ‹€λŠ” 사싀을 확인할 수 μžˆλ‹€λ©΄, κΈ°μ‘΄ μΊμ‹œμ˜ 데이터λ₯Ό μž¬μ‚¬μš© κ°€λŠ₯

6. 검증 헀더 μΆ”κ°€ < 첫 번째 μš”μ²­ >

-> Header에 last-modified 검증 헀더 μΆ”κ°€

-> 데이터가 λ§ˆμ§€λ§‰μ— μˆ˜μ •λœ μ‹œκ°„ ν‘œμ‹œ

7. 검증 헀더 μΆ”κ°€ < 두 번째 μš”μ²­ >

8. 검증 헀더(last-modified)와 쑰건뢀 μš”μ²­(if-modified-since)

-> 304 not Modified + 헀더 메타 μ •λ³΄λ§Œ 응닡 λœλ‹€. ( λ°”λ”” x )

-> μΊμ‹œμ˜ 메타 μ •λ³΄λŠ” μ„œλ²„κ°€ 보낸 응닡 헀더 μ •λ³΄λ‘œ κ°±μ‹ λœλ‹€.

-> ν΄λΌμ΄μ–ΈνŠΈλŠ” μΊμ‹œμ— μ €μž₯λ˜μ–΄ μžˆλŠ” 데이터 μž¬ν™œμš©

-> 결과적으둜, λ„€νŠΈμ›Œν¬ λ‹€μš΄λ‘œλ“œκ°€ λ°œμƒν•˜μ§€λ§Œ, μš©λŸ‰ 적은 헀더 μ •λ³΄λ§Œ λ‹€μš΄λ‘œλ“œν•œλ‹€ => 맀우 μ‹€μš©μ μΈ ν•΄κ²°μ±…

 

9. ETag (Entity Tag)

-> μΊμ‹œμš© 데이터에 μž„μ˜μ˜ κ³ μœ ν•œ 버전 이름을 달아둔닀. ex) ETag: 'v1.0', ETag: 'v2.0'

-> 데이터가 λ³€κ²½λ˜λ©΄ 이 이름을 λ°”κΎΈμ–΄ 변경함 (Hashλ₯Ό λ‹€μ‹œ 생성)

  • ex) ETag: 'aaaa' --> ETag: 'bbbb'

10. ETag λ™μž‘ 원리-κ²°κ³Ό

-> ETag만 λ³΄λ‚΄μ„œ κ°™μœΌλ©΄ μœ μ§€, λ‹€λ₯΄λ©΄ λ‹€μ‹œ λ„€νŠΈμ›Œν¬λ₯Ό 탄닀. (key-value 비ꡐ ν˜•μ‹)

-> μΊμ‹œ μ €μž₯μ†Œμ—μ„œ 보낸 ETag와 μ„œλ²„μ˜ ETagλŠ” 이름은 κ°™μ§€λ§Œ, hash 방식이기에, value값이 λ‹€λ₯Ό 수 μžˆλ‹€(데이터가 μ—…λ°μ΄νŠΈ 됐을 μ‹œ). 

-> 즉, ETag만 μ„œλ²„μ— 보내 일치/뢈일치 μ—¬λΆ€λ₯Ό 확인 ν•  수 있고, κ·Έλ¦¬ν•˜μ—¬ μΊμ‹œμ œμ–΄ λ‘œμ§μ„ μ„œλ²„μ—μ„œ μ™„μ „νžˆ 관리할 수 있게 λœλ‹€.

 

11. μΊμ‹œ μ œμ–΄ 헀더

  • Cache-control: μΊμ‹œ μ œμ–΄
  • Pragma: μΊμ‹œ μ œμ–΄ (ν•˜μœ„ ν˜Έν™˜)
  • Expires: μΊμ‹œ 유효 κΈ°κ°„ (ν•˜μœ„ ν˜Έν™˜): μΊμ‹œ λ§Œλ£ŒμΌμ„ μ •ν™•ν•œ λ‚ μ§œλ‘œ 지정 -> μ§€κΈˆμ€ 더 μœ μ—°ν•œ cache-control: max-age ꢌμž₯

12. Cache-control

-> max-age: μΊμ‹œ 유효 μ‹œκ°„, 초 λ‹¨μœ„

-> no-cache: λ°μ΄ν„°λŠ” μΊμ‹œν•΄λ„ λ˜μ§€λ§Œ, 항상 origin μ„œλ²„μ— κ²€μ¦ν•˜κ³  μ‚¬μš©

-> no-store: 데이터에 민감 정보 있으면 μ €μž₯ν•˜μ§€ μ•ŠλŠ”λ‹€.

 

13. 쑰건뢀 μš”μ²­ 헀더

  • if-match, if-none-match: ETag κ°’ μ‚¬μš©
  • if-modified-since, if unmodified-since: last-modified κ°’ μ‚¬μš©
  • ETag와 last-modified λ‘˜μ€ μ„œλ‘œ λ°˜λŒ€λœλ‹€.

14. ν”„λ‘μ‹œ μΊμ‹œ

-> 자주 μ‚¬μš©λ˜λŠ” 데이터λ₯Ό proxy μΊμ‹œ μ„œλ²„μ— 배치

-> 0.5초 κ±Έλ € λ―Έκ΅­ μ„œλ²„κΉŒμ§€ 가지 μ•Šκ³ , ν”„λ‘μ‹œ μ„œλ²„μ—μ„œ 0.1μ΄ˆλ§Œμ— ν•΄κ²°ν•œλ‹€.

 

-> cache-control: public -> 응닡이 public μΊμ‹œμ— μ €μž₯λ˜μ–΄λ„ 됨

-> cache-control: private -> 응닡이 ν•΄λ‹Ή μ‚¬μš©μžλ§Œμ„ μœ„ν•œ 것 ( private μΊμ‹œμ— μ €μž₯ν•΄μ•Όν•œλ‹€(κΈ°λ³Έκ°’) )

 

15. μΊμ‹œ λ¬΄νš¨ν™”

-> ν™•μ‹€ν•œ μΊμ‹œ λ¬΄νš¨ν™”: μ€‘μš”ν•œ μ •λ³΄λ‚˜ 민감 데이터λ₯Ό λ‹€λ£° 경우 ν™•μ‹€νžˆ μΊμ‹œλ₯Ό λ¬΄νš¨ν™” μ„€μ •ν•΄μ•Όν•œλ‹€.

 

16. Cache-control

  • no-cache: λ°μ΄ν„°λŠ” μΊμ‹œν•΄λ„ λ˜μ§€λ§Œ, 항상 originμ„œλ²„μ— κ²€μ¦ν•˜κ³  μ‚¬μš©
  • no-store: 데이터에 λ―Όκ°ν•œ 정보가 μžˆμœΌλ―€λ‘œ, μ €μž₯ν•˜λ©΄ μ•ˆλœλ‹€.
  • must-revalidate: μΊμ‹œ 만료 ν›„ 졜초 μ‘°νšŒμ‹œ origin μ„œλ²„μ— κ²€μ¦ν•˜κ³  μ‚¬μš© -> origin μ„œλ²„ μ ‘κ·Ό μ‹€νŒ¨μ‹œ λ°˜λ“œμ‹œ 였λ₯˜κ°€ λ°œμƒν•΄μ•Όν•¨ (504, Gateway Timeout)

17. no-cache와 must-revalidate의 차이

-> no-cache

-> must-revalidate