HTTP 헀더 κ°œμš”


field-name: field-value ν˜•μ‹μœΌλ‘œ 이루어져 μžˆλ‹€.

HTTP ν—€λ”μ˜ μš©λ„

  • HTTP 전솑에 ν•„μš”ν•œ λͺ¨λ“  뢀가정보λ₯Ό ν¬ν•¨ν•œλ‹€.
    • e.g. λ©”μ‹œμ§€ λ°”λ””μ˜ λ‚΄μš©, λ©”μ‹œμ§€ λ°”λ””μ˜ 크기, μ••μΆ•, 인증, 등등…
  • ν‘œμ€€ 헀더가 λ„ˆλ¬΄ 많으며, ν•„μš” μ‹œ μž„μ˜μ˜ 헀더λ₯Ό μΆ”κ°€ν•  수 μžˆλ‹€.

HTTP ν—€λ”μ˜ λΆ„λ₯˜

  • General 헀더 - λ©”μ‹œμ§€ 전체에 μ μš©λ˜λŠ” 정보
    • e.g. Connection: close
  • Reqeust 헀더 - μš”μ²­ 정보
    • e.g. User-Agent: Mozilla/5.0 (Macintosh; ..)
  • Response 헀더 - 응닡 정보
    • e.g. Server: Apache
  • Representation 헀더 - ν‘œν˜„ 데이터 정보
    • e.g. Content-Type: text/html, Content-Length: 3423

HTTP BODY

  • λ©”μ‹œμ§€ 본문을 톡해 ν‘œν˜„ 데이터λ₯Ό μ „λ‹¬ν•œλ‹€.
  • λ©”μ‹œμ§€ λ³Έλ¬Έ = νŽ˜μ΄λ‘œλ“œ
  • ν‘œν˜„ = μš”μ²­μ΄λ‚˜ μ‘λ‹΅μ—μ„œ 전달할 μ‹€μ œ 데이터
  • ν‘œν˜„ 헀더 = ν‘œν˜„ 데이터 해석 정보 제곡
    • 데이터 μœ ν˜•, 길이, μ••μΆ• 정보 등등…

ν‘œν˜„


Content-Type

ν‘œν˜„ λ°μ΄ν„°μ˜ ν˜•μ‹

  • λ―Έλ””μ–΄ νƒ€μž…, 문자 인코딩
  • e.g. Content-Type: application/json

Content-Encoding

ν‘œν˜„ λ°μ΄ν„°μ˜ μ••μΆ• 방식

  • ν‘œν˜„ 데이터λ₯Ό μ••μΆ•ν•˜κΈ° μœ„ν•΄ μ‚¬μš©
  • 데이터λ₯Ό μ „λ‹¬ν•˜λŠ” κ³³μ—μ„œ μ••μΆ• ν›„ 인코딩 헀더 μΆ”κ°€
  • 데이터λ₯Ό μ½λŠ” μͺ½μ—μ„œ 인코딩 ν—€λ”μ˜ μ •λ³΄λ‘œ μ••μΆ• ν•΄μ œ
  • e.g. Content-Encoding: gzip

Content-Language

ν‘œν˜„ λ°μ΄ν„°μ˜ μžμ—° μ–Έμ–΄

  • ν‘œν˜„ λ°μ΄ν„°μ˜ μžμ—° μ–Έμ–΄λ₯Ό ν‘œν˜„
  • e.g. Content-Language: en-US

Content-Length

ν‘œν˜„ λ°μ΄ν„°μ˜ 길이

  • λ°”μ΄νŠΈ λ‹¨μœ„
  • Transfer-Encoding(전솑 μ½”λ”©)을 μ‚¬μš©ν•˜λ©΄ Content-Length λ₯Ό μ‚¬μš©ν•˜λ©΄ μ•ˆλ¨

μ½˜ν…μΈ  ν˜‘μƒ


Content Negotiation μ΄λž€?

Content Negotiation μ΄λž€ ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„ ν˜Έν•˜λŠ” ν‘œν˜„μ„ μš”μ²­ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€.

  • Accept: ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„ ν˜Έν•˜λŠ” λ―Έλ””μ–΄ νƒ€μž… 전달
  • Accept-Charset: ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„ ν˜Έν•˜λŠ” 문자 인코딩
  • Accept-Encoding: ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„ ν˜Έν•˜λŠ” μ••μΆ• 인코딩
  • Accept-Language: ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„ ν˜Έν•˜λŠ” μžμ—° μ–Έμ–΄ ν˜‘μƒ ν—€λ”λŠ” μš”μ²­ μ‹œ μ‚¬μš©λ˜λ©° μœ„μ™€ 같은 ν˜•νƒœλ‘œ ν¬ν•¨λœλ‹€.

ν˜‘μƒκ³Ό μš°μ„ μˆœμœ„

μ„ ν˜Έν•˜λŠ” ν‘œν˜„μ˜ μš°μ„ μˆœμœ„λ₯Ό μ •μ˜ν•˜μ—¬ μš”μ²­ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€.

  • 0~1 μ‚¬μ΄μ˜ Quality Values(q) 값을 μ‚¬μš©ν•˜μ—¬ 큰 값을 μš°μ„ ν•œλ‹€. (q 값이 μ—†λ‹€λ©΄ 1이 μƒλž΅λœ 것을 의미)
GET /event
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7

μœ„μ™€ 같은 μš”μ²­μ΄ μ£Όμ–΄μ‘Œμ„ λ•Œ μš°μ„ μˆœμœ„λŠ” μ•„λž˜μ™€ κ°™λ‹€.

  1. ko-KR(;q=1)
  2. ko;q=0.9
  3. en-US;q=0.8
  4. en;q=0.7

ꡬ체적인 것을 μš°μ„ ν•œλ‹€.

GET /event
Accept: text/*,text/plain,text/plain;format=flowed,*/*

μœ„μ™€ 같은 μš”μ²­μ΄ μ£Όμ–΄μ‘Œμ„ λ•Œ μš°μ„ μˆœμœ„λŠ” μ•„λž˜μ™€ κ°™λ‹€.

  1. text/plain;format=flowed
  2. text/plain
  3. text/*
  4. /

ꡬ체적인 것을 κΈ°μ€€μœΌλ‘œ λ―Έλ””μ–΄ νƒ€μž…μ„ λ§žμΆ˜λ‹€.

GET /event
Accept: text/*;q=0.3,text/html;q=0.7,text/html;level=1,text/html;level=2;q=0.4,*/*;q=0.5

μœ„μ™€ 같은 μš”μ²­μ΄ μ£Όμ–΄μ‘Œμ„ λ•Œ q값은 μ•„λž˜μ™€ κ°™λ‹€.

  • text/html;level=1;q=1
  • text/html;q=0.7
  • text/plain;q=0.3
  • image/jpeg;q=0.5
  • text/html;level=2;q=0.4
  • text/html;level=3;q=0.7

전솑 방식


λ‹¨μˆœ 전솑 Content-Length

λ©”μ‹œμ§€ 바디에 λŒ€ν•œ Content-Length λ₯Ό μ§€μ •ν•˜μ—¬ μ „μ†‘ν•œλ‹€.

HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 3423
<html>
<body>...</body>
</html>

μ••μΆ• 전솑 Content-Encoding

Content-Encoding 을 λͺ…μ‹œν•˜μ—¬ λ©”μ‹œμ§€ λ°”λ””λ₯Ό μ••μΆ•ν•˜μ—¬ μ „μ†‘ν•œλ‹€.

HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Encoding: gzip
Content-Length: 521
lkj123kljoiasudlkjaweioluywlnfdo912u34ljko98udjkl

λΆ„ν•  전솑 Transfer-Encoding

λ©”μ‹œμ§€ λ°”λ””λ₯Ό λΆ„ν• ν•˜μ—¬ μ „μ†‘ν•œλ‹€. λΆ„ν•  전솑 μ‹œ Chunk λ§ˆλ‹€ 길이가 주어지기 λ•Œλ¬Έμ— Content-Length λ₯Ό λͺ…μ‹œν•˜μ§€ μ•Šμ•„λ„ λœλ‹€.

HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked
5
Hello
5
World
0
\r\n

λ²”μœ„ 전솑 Range, Content-Range

데이터λ₯Ό λ°›λŠ” 도쀑 전솑이 끊길 경우 λ²”μœ„ 전솑을 톡해 남은 데이터λ₯Ό 이어 받을 수 μžˆλ‹€.

HTTP/1.1 200 OK
Content-Type: text/plain
Content-Range: bytes 1001-2000 / 2000
qweqwe1l2iu3019u2oehj1987askjh3q98y

일반 정보


From

μœ μ € μ—μ΄μ „νŠΈμ˜ 이메일 정보

  • 일반적으둜 잘 μ‚¬μš©λ˜μ§€ μ•ŠλŠ”λ‹€.
  • 검색 엔진 같은 κ³³μ—μ„œ 주둜 μ‚¬μš©ν•œλ‹€.
  • μš”μ²­μ—μ„œ μ‚¬μš©ν•œλ‹€.

Referer

이전 μ›Ή νŽ˜μ΄μ§€μ˜ μ£Όμ†Œ

  • ν˜„μž¬ μš”μ²­λœ νŽ˜μ΄μ§€μ˜ 이전 μ›Ή νŽ˜μ΄μ§€ μ£Όμ†Œμ΄λ‹€.
  • A β†’ B 둜 μ΄λ™ν•˜λŠ” 경우 B λ₯Ό μš”μ²­ν•  λ•Œ Referer: A λ₯Ό ν¬ν•¨ν•΄μ„œ μš”μ²­ν•œλ‹€.
  • Referer λ₯Ό μ‚¬μš©ν•΄μ„œ μœ μž… 경둜λ₯Ό 뢄석할 수 μžˆλ‹€.
  • μš”μ²­μ—μ„œ μ‚¬μš©ν•œλ‹€.

User-Agent

μœ μ € μ—μ΄μ „νŠΈ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 정보

user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/
537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36
  • ν΄λΌμ΄μ–ΈνŠΈμ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 정보 (μ›Ή λΈŒλΌμš°μ € 정보, λ“±λ“±)
  • μ–΄λ–€ μ’…λ₯˜μ˜ λΈŒλΌμš°μ €μ—μ„œ μž₯μ• κ°€ λ°œμƒν•˜λŠ”μ§€ νŒŒμ•…ν•  수 μžˆλ‹€.
  • μš”μ²­μ—μ„œ μ‚¬μš©ν•œλ‹€.

Server

μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ” ORIGIN μ„œλ²„μ˜ μ†Œν”„νŠΈμ›¨μ–΄ 정보

Server: Apache/2.2.22 (Debian)
  • μ‘λ‹΅μ—μ„œ μ‚¬μš©ν•œλ‹€.

Date

λ©”μ‹œμ§€κ°€ λ°œμƒν•œ λ‚ μ§œμ™€ μ‹œκ°„

Date: Tue, 15 Nov 1994 08:12:31 GMT
  • μ‘λ‹΅μ—μ„œ μ‚¬μš©ν•œλ‹€.

νŠΉλ³„ν•œ 정보


Host

μš”μ²­ν•œ 호슀트 정보 (도메인)

  • μš”μ²­μ—μ„œ μ‚¬μš©ν•˜λ©° ν•„μˆ˜μ΄λ‹€.
  • ν•˜λ‚˜μ˜ μ„œλ²„κ°€ μ—¬λŸ¬ 도메인을 μ²˜λ¦¬ν•΄μ•Ό ν•  λ•Œ. 즉, ν•˜λ‚˜μ˜ IP μ£Όμ†Œμ— μ—¬λŸ¬ 도메인이 μ μš©λ˜μ–΄ μžˆμ„ λ•Œ μ‚¬μš©λœλ‹€.

Location

νŽ˜μ΄μ§€ λ¦¬λ‹€μ΄λ ‰μ…˜

  • μ›Ή λΈŒλΌμš°μ €λŠ” 3xx 응닡 결과에 Location 헀더가 있으면, Location μœ„μΉ˜λ‘œ μžλ™ μ΄λ™ν•œλ‹€.
  • 201 Created μ—μ„œμ˜ Location 값은 μš”μ²­μ— μ˜ν•΄ μƒμ„±λœ λ¦¬μ†ŒμŠ€ URI λ₯Ό μ˜λ―Έν•œλ‹€.

Allow

ν—ˆμš© κ°€λŠ₯ν•œ HTTP λ©”μ„œλ“œ

  • 405 Method Not Allowed μ—μ„œ 응닡에 포함해야 ν•œλ‹€.

Retry-After

μœ μ € μ—μ΄μ „νŠΈκ°€ λ‹€μŒ μš”μ²­μ„ ν•˜κΈ°κΉŒμ§€ κΈ°λ‹€λ €μ•Ό ν•˜λŠ” μ‹œκ°„

  • 503 Service Unavaiable: μ„œλΉ„μŠ€κ°€ μ–Έμ œκΉŒμ§€ 뢈λŠ₯인지 μ•Œλ €μ€„ 수 μžˆλ‹€.

인증


Authorization

ν΄λΌμ΄μ–ΈνŠΈ 인증 정보λ₯Ό μ„œλ²„μ— 전달

Authorization: Basic xxxxx

WWW-Authenticate

λ¦¬μ†ŒμŠ€ μ ‘κ·Ό μ‹œ ν•„μš”ν•œ 인증 방법 μ •μ˜

WWW-Authenticate: Newauth realm="apps", type=1,title="Login to \"apps\"", Basic
realm="simple"
  • 401 Unauthorized 응닡과 ν•¨κ»˜ μ‚¬μš©ν•œλ‹€.

μΏ ν‚€


μ›ΉλΈŒλΌμš°μ € 내뢀에 μΏ ν‚€ μ €μž₯μ†Œκ°€ μ‘΄μž¬ν•œλ‹€.

  • Set-Cookie: μ„œλ²„μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈλ‘œ μΏ ν‚€λ₯Ό μ „λ‹¬ν•œλ‹€.
  • Cookie: ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ—μ„œ 받은 μΏ ν‚€λ₯Ό μ €μž₯ν•˜κ³ , HTTP μš”μ²­ μ‹œ μ„œλ²„λ‘œ μ „λ‹¬ν•œλ‹€.
set-cookie: sessionId=abcde1234; expires=Sat, 26-Dec-2020 00:00:00 GMT; path=/;
domain=.google.com; Secure
  • μΏ ν‚€λŠ” μ‚¬μš©μž 둜그인 μ„Έμ…˜ 관리 및 κ΄‘κ³  정보 νŠΈλž˜ν‚Ήμ— μ‚¬μš©λœλ‹€.
  • μΏ ν‚€ μ •λ³΄λŠ” 항상 μ„œλ²„μ—μ„œ μ „μ†‘λœλ‹€.
    • λ„€νŠΈμ›Œν¬ νŠΈλž˜ν”½μ„ μΆ”κ°€λ‘œ μœ λ°œν•œλ‹€.
    • μ΅œμ†Œν•œμ˜ μ •λ³΄λ§Œ μ‚¬μš©ν•œλ‹€. (μ„Έμ…˜ id, 인증 토큰)
  • λ³΄μ•ˆμ— λ―Όκ°ν•œ λ°μ΄ν„°λŠ” μ €μž₯ν•˜λ©΄ μ•ˆλœλ‹€. (주민번호, μ‹ μš©μΉ΄λ“œ 번호 λ“±λ“±)

μΏ ν‚€ - 생λͺ…μ£ΌκΈ°

Set-Cookie: expires=Sat, 26-Dec-2020 04:39:21 GMT
  • 만료일이 되면 μΏ ν‚€λ₯Ό μ‚­μ œν•œλ‹€.
Set-Cookie: max-age=3600 (3600초)
  • 0 μ΄λ‚˜ 음수λ₯Ό μ§€μ •ν•˜λ©΄ μΏ ν‚€λ₯Ό μ‚­μ œν•œλ‹€. μ„Έμ…˜ μΏ ν‚€ - 만료 λ‚ μ§œλ₯Ό μƒλž΅ν•˜λ©΄ λΈŒλΌμš°μ € μ’…λ£Œ μ‹œ κΉŒμ§€λ§Œ μœ μ§€ν•œλ‹€. μ˜μ† μΏ ν‚€ - 만료 λ‚ μ§œλ₯Ό μž…λ ₯ν•˜λ©΄ ν•΄λ‹Ή λ‚ μ§œκΉŒμ§€ μœ μ§€ν•œλ‹€.

μΏ ν‚€ - 도메인

domain=example.org
  • λͺ…μ‹œν•  경우 - λͺ…μ‹œν•œ λ¬Έμ„œ κΈ°μ€€ 도메인 + μ„œλΈŒ 도메인을 ν¬ν•¨ν•˜μ—¬ μΏ ν‚€λ₯Ό μƒμ„±ν•œλ‹€.
    • e.g. example.org, dev.example.org λͺ¨λ‘ μΏ ν‚€ 접근이 κ°€λŠ₯
  • μƒλž΅ν•  경우 - ν˜„μž¬ λ¬Έμ„œ κΈ°μ€€ λ„λ©”μΈλ§Œ μ μš©ν•œλ‹€.
    • e.g. example.org μ—μ„œλ§Œ μΏ ν‚€ 접근이 κ°€λŠ₯

μΏ ν‚€ - 경둜

path=/home

이 경둜λ₯Ό ν¬ν•¨ν•œ ν•˜μœ„ 경둜 νŽ˜μ΄μ§€λ§Œ μΏ ν‚€ 접근이 κ°€λŠ₯ν•˜λ‹€. 일반적으둜 path=/ 루트둜 μ§€μ •ν•œλ‹€.

  • e.g. /home, /home/level1, … λͺ¨λ‘ μΏ ν‚€ μ ‘κ·Ό κ°€λŠ₯
  • e.g. /hello λŠ” λΆˆκ°€λŠ₯

μΏ ν‚€ - λ³΄μ•ˆ

Secure
  • μΏ ν‚€λŠ” http, https λ₯Ό κ΅¬λΆ„ν•˜μ§€ μ•Šκ³  μ „μ†‘ν•˜κΈ° λ•Œλ¬Έμ— Secure λ₯Ό μ μš©ν•˜λ©΄ https 인 κ²½μš°μ—λ§Œ μ „μ†‘ν•œλ‹€.
HttpOnly
  • JS μ—μ„œ 접근이 λΆˆκ°€ν•˜λ‹€.
  • HTTP μ „μ†‘μ—λ§Œ μ‚¬μš©ν•œλ‹€.
SameSite
  • μš”μ²­ 도메인과 쿠킀에 μ„€μ •λœ 도메인이 같은 κ²½μš°μ—λ§Œ μΏ ν‚€λ₯Ό μ „μ†‘ν•œλ‹€.

HTTP Caching


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

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

μΊμ‹œ 적용

μΊμ‹œλ₯Ό 톡해 μΊμ‹œ κ°€λŠ₯ μ‹œκ°„ λ™μ•ˆ λ„€νŠΈμ›Œν¬λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€.

μΊμ‹œ μ‹œκ°„ 초과

μΊμ‹œ 유효 μ‹œκ°„μ΄ 초과되면, μ„œλ²„λ₯Ό 톡해 데이터λ₯Ό λ‹€μ‹œ μ‘°νšŒν•˜κ³ , μΊμ‹œλ₯Ό κ°±μ‹ ν•œλ‹€.

검증 헀더

μΊμ‹œ 데이터와 μ„œλ²„ 데이터가 같은지 κ²€μ¦ν•˜λŠ” 데이터

Last-Modified: 2020λ…„ 11μ›” 10일 10:00:00

쑰건뢀 μš”μ²­

검증 ν—€λ”λ‘œ 쑰건에 λ”°λ₯Έ λΆ„κΈ°

if-modified-since: 2020λ…„ 11μ›” 10일 10:00:00

μΊμ‹œ μ‹œκ°„ 초과

μΊμ‹œκ°€ 만료된 후에도 μ„œλ²„μ—μ„œ 데이터λ₯Ό λ³€κ²½ν•˜μ§€ μ•Šμ•˜μ„ 경우, ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„μ˜ 데이터가 κ°™λ‹€λŠ” 사싀을 확인할 수 μžˆλ‹€λ©΄ μ €μž₯ν•΄λ‘μ—ˆλ˜ μΊμ‹œλ₯Ό μž¬μ‚¬μš© ν•  수 μžˆλ‹€.

  1. μΊμ‹œ 유효 μ‹œκ°„μ΄ μ΄ˆκ³Όν•΄λ„, μ„œλ²„μ˜ 데이터가 κ°±μ‹ λ˜μ§€ μ•ŠμœΌλ©΄ 304 Not Modified 와 λ°”λ”” 없이 ν—€λ”μ˜ 메타 μ •λ³΄λ§Œ μ‘λ‹΅ν•œλ‹€.
  2. ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„κ°€ 보낸 응닡 헀더 정보λ₯Ό 톡해 μΊμ‹œμ˜ 메타 정보λ₯Ό κ°±μ‹ ν•˜κ³  μΊμ‹œμ— μ €μž₯λ˜μ–΄ μžˆλŠ” 데이터λ₯Ό μž¬ν™œμš©ν•œλ‹€.
  3. 결과적으둜 λ„€νŠΈμ›Œν¬ λ‹€μš΄λ‘œλ“œκ°€ λ°œμƒν•˜μ§€λ§Œ μš©λŸ‰μ΄ 적은 헀더 μ •λ³΄λ§Œ λ‹€μš΄λ‘œλ“œ 받을 수 μžˆλ‹€.

Last-Modified 와 If-Modified-Since 의 단점

  • λ‚ μ§œ 기반의 λ‘œμ§μ„ μ‚¬μš©ν•˜κ³  1초 미만 λ‹¨μœ„λ‘œ μΊμ‹œ 쑰정이 λΆˆκ°€λŠ₯ν•˜λ‹€.
  • A β†’ B β†’ A 와 같은 데이터 변경이 일어났을 경우, 결둠적인 λ°μ΄ν„°λŠ” κ°™μ§€λ§Œ, μˆ˜μ •μΌμ΄ λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— λ‹€μ‹œ λ‹€μš΄λ‘œλ“œ λ°›μ•„μ•Ό ν•œλ‹€.
  • μ„œλ²„μ—μ„œ λ³„λ„μ˜ μΊμ‹œ λ‘œμ§μ„ κ΄€λ¦¬ν•˜κ³  싢을 경우
    • e.g. μŠ€νŽ˜μ΄μŠ€λ‚˜ μ£Όμ„μ²˜λŸΌ 크게 영ν–₯이 μ—†λŠ” λ³€κ²½μ—μ„œ μΊμ‹œλ₯Ό μœ μ§€ν•˜κ³  싢은 경우

ETag 와 If-None-Match

ETag: "aaaaaaaaaa"
  • μΊμ‹œμš© 데이터에 μž„μ˜μ˜ 고유 버전 이름을 달아둔닀.
  • 데이터가 λ³€κ²½λ˜λ©΄ 이 이름을 λ°”κΎΈμ–΄μ„œ λ³€κ²½ν•œλ‹€. (Hash λ₯Ό λ‹€μ‹œ 생성)

Cache-Control: μΊμ‹œ μ œμ–΄

μΊμ‹œ μ§€μ‹œμ–΄ (directives)

  • Cache-Control: max-age
    • μΊμ‹œ 유효 μ‹œκ°„, 초 λ‹¨μœ„
  • Cache-Control: no-cache
    • λ°μ΄ν„°λŠ” μΊμ‹œν•΄λ„ λ˜μ§€λ§Œ, 항상 origin μ„œλ²„μ— κ²€μ¦ν•˜κ³  μ‚¬μš©
  • Cache-Control: no-store
    • 데이터에 λ―Όκ°ν•œ 정보가 μžˆμœΌλ―€λ‘œ μ €μž₯ν•˜λ©΄ μ•ˆλ¨ (λ©”λͺ¨λ¦¬μ—μ„œ μ‚¬μš©ν•˜κ³  μ΅œλŒ€ν•œ 빨리 μ‚­μ œ)

ν”„λ‘μ‹œ μΊμ‹œ μ„œλ²„λž€?

ν”„λ‘μ‹œλŠ” ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ 사이 λŒ€λ¦¬ 톡신을 μˆ˜ν–‰ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€. ν”„λ‘μ‹œ μΊμ‹œ μ„œλ²„λž€ 원 μ„œλ²„μ—μ„œ λ‹€μš΄λ‘œλ“œ 받을 μΊμ‹œλ₯Ό 미리 λ°›μ•„λ†“λŠ” μΌμ’…μ˜ 쀑계 μΊμ‹œ μ„œλ²„λ₯Ό μ˜λ―Έν•œλ‹€. 기타 μΊμ‹œ μ§€μ‹œμ–΄

  • Cache-Control: public
    • 응닡이 public μΊμ‹œμ— μ €μž₯λ˜μ–΄λ„ 됨
  • Cache-Control: private
    • 응닡이 ν•΄λ‹Ή μ‚¬μš©μžλ§Œμ„ μœ„ν•œ κ²ƒμ΄λ―€λ‘œ private μΊμ‹œμ— μ €μž₯ν•΄μ•Ό 함
  • Cache-Control: s-maxage
    • ν”„λ‘μ‹œ μΊμ‹œμ—λ§Œ μ μš©λ˜λŠ” max-age
  • Age: 60 (HTTP 헀더)
    • origin μ„œλ²„μ—μ„œ 응닡 ν›„ ν”„λ‘μ‹œ μΊμ‹œ 내에 λ¨Έλ¬Έ μ‹œκ°„ (초)

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

λΈŒλΌμš°μ €κ°€ μΊμ‹œν•˜λ©΄ μ•ˆλ˜λŠ” 정보듀에 λŒ€ν•˜μ—¬ ν™•μ‹€ν•˜κ²Œ μΊμ‹œλ₯Ό λ¬΄νš¨ν™”ν•˜κ³  싢을 λ•Œ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” μ§€μ‹œμ–΄λ“€μ΄λ‹€.

  • Cache-Control: no-cache
    • λ°μ΄ν„°λŠ” μΊμ‹œν•΄λ„ λ˜μ§€λ§Œ, 항상 원 μ„œλ²„μ— κ²€μ¦ν•˜κ³  μ‚¬μš©
  • Cache-Control: no-store
    • 데이터에 λ―Όκ°ν•œ 정보가 μžˆμœΌλ―€λ‘œ μ €μž₯ν•˜λ©΄ μ•ˆλ¨ (λ©”λͺ¨λ¦¬μ—μ„œ μ‚¬μš©ν•˜κ³  μ΅œλŒ€ν•œ 빨리 μ‚­μ œ)
  • Cache-Control: must-revalidate
    • μΊμ‹œ 만료 ν›„ 졜초 쑰회 μ‹œ 원 μ„œλ²„μ— 검증해야 함
    • 원 μ„œλ²„ μ ‘κ·Ό μ‹€νŒ¨ μ‹œ λ°˜λ“œμ‹œ 였λ₯˜κ°€ λ°œμƒν•΄μ•Ό 함 - 504 Gateway Timeout
    • must-revalidate λŠ” μΊμ‹œ 유효 μ‹œκ°„μ΄λΌλ©΄ μΊμ‹œλ₯Ό μ‚¬μš©ν•¨
  • Pragma: no-cache
    • HTTP 1.0 ν•˜μœ„ ν˜Έν™˜

no-cache vs must-revalidate

ν”„λ‘μ‹œ μΊμ‹œμ™€ 원 μ„œλ²„κ°€ μˆœκ°„ λ‹¨μ ˆλ˜μ–΄ 원 μ„œλ²„ 접근이 λΆˆκ°€ν•œ 경우

  • no-cache λŠ” ν”„λ‘μ‹œ μ„œλ²„μ˜ 데이터라도 μ‘°νšŒν•˜μ—¬ μ‘λ‹΅ν•˜λŠ” κ²½μš°κ°€ 있음
  • must-revalidate λŠ” 항상 504 μ—λŸ¬λ₯Ό 응닡해야 함