HTTP ãã£ãã·ã¥
HTTP ãã£ãã·ã¥ã¯ããªã¯ã¨ã¹ãã«é¢é£ä»ããããã¬ã¹ãã³ã¹ãæ ¼ç´ããæ ¼ç´ãããã¬ã¹ãã³ã¹ãå¾ç¶ã®ãªã¯ã¨ã¹ãã®ããã«åå©ç¨ãã¾ãã
åå©ç¨ã«ã¯ããã¤ãã®å©ç¹ãããã¾ããã¾ãããªã¯ã¨ã¹ããå ãµã¼ãã¼ã«å±ããå¿ è¦ããªããããã¯ã©ã¤ã¢ã³ãã¨ãã£ãã·ã¥ã®è·é¢ãè¿ãã»ã©ãã¬ã¹ãã³ã¹ãéããªãã¾ããã»ã¨ãã©ã®ä¾ã¯ããã©ã¦ã¶ã¼èªèº«ããã©ã¦ã¶ã¼ã®ãªã¯ã¨ã¹ãã®ãã£ãã·ã¥ãæ ¼ç´ãããã®ã§ãã
ã¾ããã¬ã¹ãã³ã¹ãåå©ç¨å¯è½ãªå ´åãå ã®ãµã¼ãã¼ã¯ãªã¯ã¨ã¹ããå¦çããå¿ è¦ãããã¾ãããã¤ã¾ãããªã¯ã¨ã¹ããè§£éãã¦ã«ã¼ãã£ã³ã°ããããã¯ããã¼ã«åºã¥ãã¦ã»ãã·ã§ã³ã復å ããããçµæãDBã«åãåããããããã³ãã¬ã¼ãã¨ã³ã¸ã³ãã¬ã³ããªã³ã°ãããããå¿ è¦ãããã¾ãããããã«ãããµã¼ãã¼ã®è² è·ã軽æ¸ããã¾ãã
ãã£ãã·ã¥ãé©åã«ç®¡çéå¶ãããã¨ã¯ãã·ã¹ãã ãå¥å ¨ã«ããããã«ã¨ã¦ãéè¦ã§ãã
ãã£ãã·ã¥ã®ç¨®é¡
HTTP Caching 仿§æ¸ã§ã¯ããã£ãã·ã¥ã«ã¯å¤§ããåã㦠2 ã¤ã®ç¨®é¡ãããã¾ãããã©ã¤ãã¼ããã£ãã·ã¥ã¨å ±æãã£ãã·ã¥ã§ãã
ãã©ã¤ãã¼ããã£ãã·ã¥
ãã©ã¤ãã¼ããã£ãã·ã¥ã¨ã¯ãç¹å®ã®ã¯ã©ã¤ã¢ã³ãï¼é常ã¯ãã©ã¦ã¶ã¼ãã£ãã·ã¥ï¼ã«çµã³ã¤ãããã£ãã·ã¥ã®ãã¨ã§ããæ ¼ç´ãããã¬ã¹ãã³ã¹ã¯ä»ã®ã¯ã©ã¤ã¢ã³ãã¨å ±æãããªãã®ã§ããã©ã¤ãã¼ããã£ãã·ã¥ã¯ãã®ã¦ã¼ã¶ã¼ç¨ã«ãã¼ã½ãã©ã¤ãºãããã¬ã¹ãã³ã¹ãæ ¼ç´ãããã¨ãã§ãã¾ãã
䏿¹ããã©ã¤ãã¼ããã£ãã·ã¥ä»¥å¤ã®ãã£ãã·ã¥ã«ãã¼ã½ãã©ã¤ãºãããã³ã³ãã³ããæ ¼ç´ãããã¨ãä»ã®ã¦ã¼ã¶ã¼ããã®ã³ã³ãã³ããåå¾ã§ããå¯è½æ§ããããæå³ããªãæ å ±æ¼æ´©ãçºçããå¯è½æ§ãããã¾ãã
ã¬ã¹ãã³ã¹ã«ãã¼ã½ãã©ã¤ãºãããã³ã³ãã³ããå«ã¿ããã©ã¤ãã¼ããã£ãã·ã¥ã«ã®ã¿æ ¼ç´ãããå ´å㯠private ãã£ã¬ã¯ãã£ããæå®ããªããã°ãªãã¾ããã
Cache-Control: private
ãã¼ã½ãã©ã¤ãºãããã³ã³ãã³ãã¯é常ã¯ããã¼ã«ãã£ã¦å¶å¾¡ããã¾ãããã¯ããã¼ã®åå¨ã常ã«ãã©ã¤ãã¼ãã§ãããã¨ã示ãã¨ã¯éããªããããã¯ããã¼ã ãã§ã¬ã¹ãã³ã¹ããã©ã¤ãã¼ãã«ãªãããã§ã¯ããã¾ããã
å ±æãã£ãã·ã¥
å ±æãã£ãã·ã¥ã¯ã¯ã©ã¤ã¢ã³ãã¨ãµã¼ãã¼ã®éã«æ ¼ç´ãããã¦ã¼ã¶ã¼éã§å ±æã§ããã¬ã¹ãã³ã¹ãæ ¼ç´ããããã«ä½¿ç¨ããã¾ããå ±æãã£ãã·ã¥ã¯ããã«ããããã·ã¼ãã£ãã·ã¥ 㨠ããã¼ã¸ããã£ãã·ã¥ ã«åé¡ããã¾ãã
ãããã·ã¼ãã£ãã·ã¥
ã¢ã¯ã»ã¹å¶å¾¡ããæ©è½ã«å ãã¦ãä¸é¨ã®ãããã·ã¼ã¯ãããã¯ã¼ã¯ããã®ãã©ãã£ãã¯ã忏ããããã«ãã£ãã·ã¥ãå®è£ ãã¦ãã¾ããããã¯é常ãµã¼ãã¹éçºè ã«ãã£ã¦ç®¡çããããã®ã§ã¯ãªãã®ã§ãé©å㪠HTTP ãããã¼ãªã©ã«ãã£ã¦ å¶å¾¡ããªããã°ãªãã¾ãããããããéå»ã«ã¯æä»£é ãã®ãããã·ã¼ãã£ãã·ã¥å®è£ ãããªãã¡ HTTP ãã£ãã·ã¥æ¨æºãæ£ããçè§£ãã¦ããªãå®è£ ãªã©ããéçºè ã«åé¡ãçºçããããã¨ãå¤ãããã¾ããã
以ä¸ã®ãããªãããã³ã·ã³ã¯ãããã¼ãç¨ãã¦ãno-store ã®ãããªç¾å¨ã® HTTP Caching 仿§æ¸ã®ãã£ã¬ã¯ãã£ããçè§£ããªãããå¤ãã¦æ´æ°ããã¦ããªããããã·ã¼ãã£ãã·ã¥ãã®å®è£
ãåé¿ããããã¾ãã
Cache-Control: no-store, no-cache, max-age=0, must-revalidate, proxy-revalidate
ããããè¿å¹´ HTTPS ãä¸è¬çã«ãªããã¯ã©ã¤ã¢ã³ã/ãµã¼ãã¼éã®éä¿¡ãæå·åãããããã«ãªã£ãããã çµè·¯ä¸ã®ãããã·ã¼ãã£ãã·ã¥ã¯ã¬ã¹ãã³ã¹ããã³ããªã³ã°ãããã¨ããã§ããã ãã£ãã·ã¥ã¨ãã¦æ¯ãèããã¨ãã§ããªãå ´åãå¤ããªã£ã¦ãã¾ãããã®ãããªå ´åã¯ãã¬ã¹ãã³ã¹ãè¦ããã¨ããã§ããªãã®ã§ãæä»£é ãã®ãããã·ã¼ãã£ãã·ã¥å®è£ ãå¿é ããå¿ è¦ã¯ããã¾ããã
ä»ã«ãã TLS ããªãã¸ãããã·ã¼ããçµç¹ã管çããèªè¨¼å± (CA) ã®è³æ ¼æ å ±ã PC ã«ã¤ã³ã¹ãã¼ã«ãããã¨ã§ãä¸éè (person-in-the-middle) çã«ãã¹ã¦ã®éä¿¡ã復å·ããã¢ã¯ã»ã¹å¶å¾¡ãªã©ãè¡ãå ´åãã¬ã¹ãã³ã¹ã®å 容ãè¦ããããã£ãã·ã¥ããããããã¨ã使ç¨å¯è½ã§ãããã ããè¿å¹´ã¯ CT (certificate transparency) ãæ®åãããã©ã¦ã¶ã¼ã«ãã£ã¦ã¯ SCT (signed certificate timestamp) ã§çºè¡ãããè¨¼ææ¸ãã許å¯ããªããã®ãããããããã®ã¡ã½ããã§ã¯ä¼æ¥ããªã·ã¼ãé©ç¨ããå¿ è¦ãããã¾ãããã®ãããªå¶å¾¡ãããç°å¢ã§ã¯ããããã·ã¼ãã£ãã·ã¥ããå¤ãã¦æ´æ°ãããªãããã¨ãå¿é ããå¿ è¦ã¯ããã¾ããã
ããã¼ã¸ããã£ãã·ã¥
ããã¼ã¸ããã£ãã·ã¥ã¯ããµã¼ãã¹éçºè ãå ãµã¼ãã¼ã®è² è·ã忣ããã³ã³ãã³ããå¹ççã«éçºããããã«æç¤ºçã«å±éãããã®ã§ããä¾ãã°ããªãã¼ã¹ãããã·ã¼ãCDNããã£ãã·ã¥ API ã¨çµã¿åããããµã¼ãã¹ã¯ã¼ã«ã¼ãªã©ãããã¾ãã
ããã¼ã¸ããã£ãã·ã¥ã®ç¹æ§ã¯ãå±éãã製åã«ãã£ã¦ç°ãªãã¾ããã»ã¨ãã©ã®å ´åãCache-Control ãããã¼ã¨èªåèªèº«ã§è¨å®ãã¡ã¤ã«ãããã·ã¥ãã¼ããéãã¦ãã£ãã·ã¥ã®åä½ãå¶å¾¡ãããã¨ãã§ãã¾ãã
ä¾ãã°ãHTTP ãã£ãã·ã¥ä»æ§æ¸ã§ã¯ãåºæ¬çã«ãã£ãã·ã¥ãæç¤ºçã«åé¤ããæ¹æ³ã¯å®ç¾©ããã¦ãã¾ãããããããããã¼ã¸ããã£ãã·ã¥ã§ã¯ãããã·ã¥ãã¼ãæä½ã API å¼ã³åºããåèµ·åãªã©ã«ãã£ã¦ãæ ¼ç´ãããã¬ã¹ãã³ã¹ããã¤ã§ãåé¤ãããã¨ãã§ãã¾ããããã«ãããããç©æ¥µçãªãã£ãã·ã¥æ¦ç¥ãå¯è½ã«ãªãã¾ãã
æ¨æº HTTP ãã£ãã·ã¥ä»æ§æ¸ã®ãããã³ã«ãç¡è¦ãã¦ãæç¤ºçãªæä½ãè¡ããã¨ã使ç¨å¯è½ã§ããä¾ãã°ã次ã®ä¾ã¯ãã©ã¤ãã¼ããã£ãã·ã¥ããããã·ã¼ãã£ãã·ã¥ããªããã¢ã¦ãããèªåèªèº«ã§ç®¡çãã£ãã·ã¥ã«ã®ã¿ãã£ãã·ã¥ããæ¦ç¥ã使ç¨ããããã«æå®ãããã¨ãã§ãã¾ãã
Cache-Control: no-store
ä¾ãã°ãVarnish Cache 㯠VCL ï¼Varnish Configuration LanguageãDSL ã®ä¸ç¨®ï¼ãã¸ãã¯ã使ç¨ãã¦ãã£ãã·ã¥ã¹ãã¬ã¼ã¸ãå¦çãã¾ããããµã¼ãã¹ã¯ã¼ã«ã¼ã¨ãã£ãã·ã¥ API ã¨ã®çµã¿åããã«ãããJavaScript ã§ãã®ãã¸ãã¯ã使ãããã¨ãã§ãã¾ãã
ã¤ã¾ããããã¼ã¸ããã£ãã·ã¥ãæå³çã« no-store ãã£ã¬ã¯ãã£ããç¡è¦ããã¨ãã¦ããããããæ¨æºã«æºæ ãã¦ããªããã¨ã¿ãªãå¿
è¦ã¯ãªãã¨ãããã¨ã§ãããããã³ã·ã³ã¯ãããã¼ã®ä½¿ç¨ãé¿ãã使ç¨ãã¦ãã管çãã£ãã·ã¥æ©æ§ã®ããã¥ã¡ã³ããæ³¨ææ·±ãèªã¿ã使ç¨ããæ©æ§ã§æå®ãããæ¹æ³ã§é©åã«ãã£ãã·ã¥ãå¶å¾¡ãã¦ãããã¨ã確å®ã«ä¿æãããã¨ã§ãã
ãªããCDNã«ãã£ã¦ã¯ããã®CDNã«å¯¾ãã¦ã®ã¿æå¹ãªãããã¼ãèªåèªèº«ã§æä¾ãã¦ãããã®ãããã¾ãï¼Surrogate-Control ãªã©ï¼ãç¾å¨ãããããæ¨æºåããããã« CDN-Cache-Control ãããã¼ãå®ç¾©ãã使¥ãé²ãããã¦ãã¾ãã
ãã¥ã¼ãªã¹ãã£ãã¯ãã£ãã·ã¥
HTTP ã¯å¯è½ãªéããã£ãã·ã¥ããããã«è¨è¨ããã¦ããã®ã§ãCache-Control ãæå®ããã¦ããªãã¦ããããæ¡ä»¶ãæºããããã°ã¬ã¹ãã³ã¹ã¯æ ¼ç´ããã¦åå©ç¨ããã¾ããããã¯ãã¥ã¼ãªã¹ãã£ãã¯ãã£ãã·ã¥ã¨å¼ã°ãã¾ãã
ä¾ãã°ã次ã®ãããªã¬ã¹ãã³ã¹ãè¦ã¦ã¿ã¾ãããããã®ã¬ã¹ãã³ã¹ã®æçµæ´æ°ã¯ 1 å¹´åã§ãã
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1024
Date: Tue, 22 Feb 2022 22:22:22 GMT
Last-Modified: Tue, 22 Feb 2021 22:22:22 GMT
<!doctype html>
â¦
1 å¹´éæ´æ°ãããªãã£ãã³ã³ãã³ãã¯ããã®å¾ãã°ããæ´æ°ãããªããã¨ããã¥ã¼ãªã¹ãã£ãã¯ã«ç¥ããã¦ãã¾ãããã®ãããã¯ã©ã¤ã¢ã³ãã¯ãã®ã¬ã¹ãã³ã¹ãï¼max-age ããªãã«ããããããï¼æ ¼ç´ãããã°ããåå©ç¨ãã¾ããã©ã®ãããã®æéåå©ç¨ãããã¯å®è£
次第ã§ããã仿§ã§ã¯æ ¼ç´ããå¾ã®æéã®ç´ 10 %ï¼ãã®å ´å㯠0.1 å¹´ï¼ãæ¨å¥¨ãã¦ãã¾ãã
ãã¥ã¼ãªã¹ãã£ãã¯ãã£ãã·ã¥ã¯ Cache-Control 対å¿ãåºãæ¡ç¨ããã以åã®åé¿çã§ãããåºæ¬çã«ãã¹ã¦ã®ã¬ã¹ãã³ã¹ã¯ Cache-Control ãããã¼ãæç¤ºçã«æå®ããå¿
è¦ãããã¾ãã
age ã«åºã¥ãæ°é®®ãã¨å¤ã
æ ¼ç´ããã HTTP ã¬ã¹ãã³ã¹ã«ã¯ãæ°é®® (fresh) ã¨å¤ã (stale) ã® 2 ã¤ã®ç¶æ ãããã¾ããæ°é®®ãªç¶æ ã¯é常ãã¬ã¹ãã³ã¹ãã¾ã æå¹ã§åå©ç¨ã§ãããã¨ã示ããå¤ãç¶æ ã¯ãã£ãã·ã¥ãããã¬ã¹ãã³ã¹ããã§ã«æéåãã§ãããã¨ãæå³ãã¦ãã¾ãã
ã¬ã¹ãã³ã¹ããã¤æ°é®®ã§ããã¤å¤ããªã£ããã夿ããåºæºã¯ age ã§ãã HTTP ã§ã¯ã age ã¯ã¬ã¹ãã³ã¹ãçæããã¦ããã®çµéæéã§ããããã¯ä»ã«ããã£ãã·ã¥æ©æ§ã«ããã TTL ã«ä¼¼ã¦ãã¾ãã
次ã®ã¬ã¹ãã³ã¹ä¾ãè¦ã¦ã¿ã¾ãããï¼604800 ç§ã¯ 1 é±éï¼ã
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1024
Date: Tue, 22 Feb 2022 22:22:22 GMT
Cache-Control: max-age=604800
<!doctype html>
â¦
ãã®ä¾ã®ã¬ã¹ãã³ã¹ãæ ¼ç´ããããã£ãã·ã¥ã¯ãã¬ã¹ãã³ã¹ãçæããã¦ããã®çµéæå»ãè¨ç®ãããã®çµæãã¬ã¹ãã³ã¹ã® age ã¨ãã¦ä½¿ç¨ãã¾ãã
ä¾ãã°ãã¬ã¹ãã³ã¹ã® max-age ã®æå³ã¯ä»¥ä¸ã®éãã§ãã
- ã¬ã¹ãã³ã¹ã® age ã 1 é±éæªæºã§ããå ´åããã®ã¬ã¹ãã³ã¹ã¯æ°é®®ã§ãã
- ã¬ã¹ãã³ã¹ã® age ã 1 é±éãè¶ ããå ´åããã®ã¬ã¹ãã³ã¹ã¯å¤ãã§ãã
æ ¼ç´ãããã¬ã¹ãã³ã¹ãæ°é®®ã§ããéããã¯ã©ã¤ã¢ã³ãã®ãªã¯ã¨ã¹ããå±¥è¡ããããã«ä½¿ç¨ããã¾ãã
ã¬ã¹ãã³ã¹ãå ±æãã£ãã·ã¥ã«æ ¼ç´ãããæãã¬ã¹ãã³ã¹ã®å¹´é½¢ãã¯ã©ã¤ã¢ã³ãã«æç¤ºãããã¨ãå¯è½ã§ããä¾ãç¶ããã¨ãå ±æãã£ãã·ã¥ã 1 æ¥éã¬ã¹ãã³ã¹ãæ ¼ç´ããå ´åãå ±æãã£ãã·ã¥ã¯ããã®å¾ã®ã¯ã©ã¤ã¢ã³ãã®ãªã¯ã¨ã¹ãã«å¯¾ãã¦æ¬¡ã®ã¬ã¹ãã³ã¹ãéä¿¡ãã¾ãã
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1024
Date: Tue, 22 Feb 2022 22:22:22 GMT
Cache-Control: max-age=604800
Age: 86400
<!doctype html>
â¦
ãã®ã¬ã¹ãã³ã¹ãåãåã£ãã¯ã©ã¤ã¢ã³ãã¯ãã¬ã¹ãã³ã¹ã® max-age 㨠Age ã®å·®ã§ããæ®ã 518400 ç§ã®éããã®ã¬ã¹ãã³ã¹ãæ°é®®ã§ãããã¨ãåãåãã¾ãã
æå¹æéã¾ã㯠max-age
HTTP/1.0 ã§ã¯ã鮮度㯠Expires ãããã¼ã使ç¨ãã¦æå® ãã¦ãã¾ããã
Expires ãããã¼ã¯ãçµéæéãæå®ããã®ã§ã¯ãªããæç¤ºçãªæå»ã使ç¨ãã¦ãã£ãã·ã¥ã®æå¹æéãæå®ãã¾ãã
Expires: Tue, 28 Feb 2022 22:22:22 GMT
ãããããã®æå»å½¢å¼ã¯è§£éãé£ãããå¤ãã®å®è£
ãã°ãè¦ã¤ãããã·ã¹ãã ã¯ããã¯ãæå³çã«ããããã¨ã§åé¡ãèªçºããå¯è½æ§ãããã¾ããããã®ãããHTTP/1.1 ã§ã¯ Cache-Control ã«çµéæéãæå®ãã max-age ãæ¡ç¨ããã¾ããã
Expires 㨠Cache-Control: max-age ã®ä¸¡æ¹ãå©ç¨ã§ããå ´åã¯ã max-age ãåªå
ããããã«å®ç¾©ããã¦ãã¾ãããã®ãããHTTP/1.1 ãåºã使ç¨ãããããã«ãªã£ãç¾å¨ã§ã¯ Expires ãæä¾ããå¿
è¦ã¯ããã¾ããã
Vary
ã¬ã¹ãã³ã¹ãå¤å¥ããæ¹æ³ã¯ãåºæ¬çã« URL ã«åºã¥ãã¦ãã¾ãã
| URL | ã¬ã¹ãã³ã¹æ¬ä½ |
|---|---|
https://example.com/index.html |
<!doctype html>... |
https://example.com/style.css |
body { ... |
https://example.com/script.js |
function main () { ... |
ããããåã URL ãæã£ã¦ãã¦ãã¬ã¹ãã³ã¹ã®ã³ã³ãã³ãã常ã«åãã¨ã¯éãã¾ãããç¹ã«ã³ã³ãã³ããã´ã·ã¨ã¼ã·ã§ã³ãè¡ãããå ´åããµã¼ãã¼ããã®ã¬ã¹ãã³ã¹ã¯ AcceptãAccept-LanguageãAccept-Encoding ãªã¯ã¨ã¹ããããã¼ã®å¤ã«ãã£ã¦å¤ããå¯è½æ§ãããã¾ãã
ä¾ãã°ãAccept-Language: en ãããã¼ã§è¿ããã¦ãã£ãã·ã¥ãããè±èªã®ã³ã³ãã³ãã«å¯¾ãã¦ãAccept-Language: ja ãªã¯ã¨ã¹ããããã¼ããããªã¯ã¨ã¹ãã«å¯¾ãã¦ãã£ãã·ã¥ãããã¬ã¹ãã³ã¹ãåå©ç¨ãããã¨ã¯æã¾ããããã¾ããããã®å ´åãAccept-Language ã Vary ãããã¼ã®å¤ã«è¿½å ãããã¨ã§ãã¬ã¹ãã³ã¹ãè¨èªã«åºã¥ãã¦å¥åã«ãã£ãã·ã¥ãããããã«ãããã¨ãã§ãã¾ãã
Vary: Accept-Language
ããã«ãããã£ãã·ã¥ã¯ãã¬ã¹ãã³ã¹ URL ã ãã§ã¯ãªããã¬ã¹ãã³ã¹ URL 㨠Accept-Language ãªã¯ã¨ã¹ããããã¼ã®åæã«åºã¥ãã¦ãã¼ä»ããããããã«ãªãã¾ãã
| URL | Accept-Language |
ã¬ã¹ãã³ã¹æ¬ä½ |
|---|---|---|
https://example.com/index.html |
ja-JP |
<!doctype html>... |
https://example.com/index.html |
en-US |
<!doctype html>... |
https://example.com/style.css |
ja-JP |
body { ... |
https://example.com/script.js |
ja-JP |
function main () { ... |
ã¾ããï¼ä¾ãã°ã¬ã¹ãã³ã·ããã¶ã¤ã³ã®ããã«ï¼ã¦ã¼ã¶ã¼ã¨ã¼ã¸ã§ã³ãã«åºã¥ãã¦ã³ã³ãã³ãã®æé©åãæä¾ãã¦ããå ´åã Vary ãããã¼ã®å¤ã« User-Agent ãå«ãããã¨ãã§ãã¾ããããããä¸è¬çã« User-Agent ãªã¯ã¨ã¹ããããã¼ã«ã¯é常ã«å¤ãã®ããªã¨ã¼ã·ã§ã³ãããããã£ãã·ã¥ãåå©ç¨ãããå¯è½æ§ã大å¹
ã«ç¸®å°ãã¾ãããã®ãããå¯è½ã§ããã° User-Agent ãªã¯ã¨ã¹ããããã¼ã«åºã¥ãã®ã§ã¯ãªããæ©è½æ¤åºã«åºã¥ãã¦åä½ãå¤åãããæ¹æ³ãæ¤è¨ãã¦ãã ããã
ãã£ãã·ã¥ããããã¼ã½ãã©ã¤ãºãããã³ã³ãã³ããä»ã«åå©ç¨ãããã®ãé²ãããã«ãã¯ããã¼ã使ç¨ããã¢ããªã±ã¼ã·ã§ã³ã§ã¯ãVaryã«ã¯ããã¼ãæå®ãã代ããã« Cache-Control: private ãæå®ããå¿
è¦ãããã¾ãã
æ¤è¨¼
å¤ããªã£ãã¬ã¹ãã³ã¹ã¯ããã«ã¯ç ´æ£ããã¾ãããHTTPã«ã¯ãå ã®ãµã¼ãã¼ã«åãåããããã¨ã§ãå¤ãã¬ã¹ãã³ã¹ãæ°ãããã®ã«å¤æããä»çµã¿ãããã¾ããããã¯æ¤è¨¼ãã¾ãã¯åèªè¨¼ã¨å¼ã°ãã¾ãã
æ¤è¨¼ã¯ If-Modified-Since ã¾ã㯠If-None-Match ãªã¯ã¨ã¹ããããã¼ãå«ãæ¡ä»¶ä»ããªã¯ã¨ã¹ãã使ç¨ãããã¨ã§è¡ããã¾ãã
If-Modified-Since
以ä¸ã®ã¬ã¹ãã³ã¹ã¯ 22:22:22 ã«çæããã max-age 㯠1 æéãªã®ã§ã 23:22:22 ã¾ã§æ°é®®ã§ãããã¨ããããã¾ãã
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1024
Date: Tue, 22 Feb 2022 22:22:22 GMT
Last-Modified: Tue, 22 Feb 2022 22:00:00 GMT
Cache-Control: max-age=3600
<!doctype html>
â¦
23:22:22 ã«ãªãã¨ãã¬ã¹ãã³ã¹ã¯å¤ããªãããã£ãã·ã¥ãåå©ç¨ã§ããªããªãã¾ãããã®ãããä¸è¨ã®ãªã¯ã¨ã¹ãã¯ã¯ã©ã¤ã¢ã³ãã If-Modified-Since ãªã¯ã¨ã¹ããããã¼ãæã¤ãªã¯ã¨ã¹ããéä¿¡ããæå®ããæå»ä»¥éã«å¤æ´ããã£ããã©ããããµã¼ãã¼ã«åãåããããã¨ã示ãã¦ãã¾ãã
GET /index.html HTTP/1.1
Host: example.com
Accept: text/html
If-Modified-Since: Tue, 22 Feb 2022 22:00:00 GMT
ã³ã³ãã³ããæå®ããæå»ãã夿´ããã¦ããªãå ´åããµã¼ãã¼ã¯ 304 Not Modified ã¨ããã¬ã¹ãã³ã¹ãè¿ãã¾ãã
ãã®ã¬ã¹ãã³ã¹ã¯ã夿´ããã¦ããªãããã¨ã示ãã ããªã®ã§ãã¬ã¹ãã³ã¹æ¬ä½ã¯ããã¾ãããã¹ãã¼ã¿ã¹ã³ã¼ãã ãã§ãã®ã§ã転éãµã¤ãºã¯é常ã«å°ãããªãã¾ãã
HTTP/1.1 304 Not Modified
Content-Type: text/html
Date: Tue, 22 Feb 2022 23:22:22 GMT
Last-Modified: Tue, 22 Feb 2022 22:00:00 GMT
Cache-Control: max-age=3600
ãã®ã¬ã¹ãã³ã¹ãåä¿¡ããã¨ãã¯ã©ã¤ã¢ã³ãã¯æ ¼ç´ãããå¤ãã¬ã¹ãã³ã¹ãæ°ãããã®ã«æ»ããæ®ãã® 1 æéã®éã«åå©ç¨ãããã¨ãã§ãã¾ãã
ãµã¼ãã¼ã¯ãªãã¬ã¼ãã£ã³ã°ã·ã¹ãã ã®ãã¡ã¤ã«ã·ã¹ãã ããæ´æ°æå»ãåå¾ãããã¨ãã§ããéçãã¡ã¤ã«ãæä¾ããå ´åã«ã¯ç¸å¯¾çã«å®¹æã§ããããããããã¤ãã®åé¡ãããã¾ããä¾ãã°ãæå»å½¢å¼ãè¤éã§è§£éãã«ããã忣ãµã¼ãã¼ã§ã¯ãã¡ã¤ã«æ´æ°æå»ã®åæãåãã«ãããªã©ã§ãã
ãã®ãããªåé¡ã解決ããããã«ã ETag ã¬ã¹ãã³ã¹ãããã¼ãæ¨æºåããã¾ããã
ETag/If-None-Match
ETag ã¬ã¹ãã³ã¹ãããã¼ã®å¤ã¯ããµã¼ãã¼ãçæããä»»æã®å¤ã§ãããµã¼ãã¼ãã©ã®ããã«å¤ãçæããªããã°ãªããªããã¨ããå¶éã¯ãªãã®ã§ããµã¼ãã¼ã¯ã©ã®ãããªæå³ã«åºã¥ãã¦å¤ãè¨å®ãã¦ãèªç±ã§ããä¾ãã°ãæ¬ä½ã®ã³ã³ãã³ãã®ããã·ã¥ããã¼ã¸ã§ã³çªå·ãªã©ã§ãã
ä¾ãã°ã ETag ãããã¼ã«ããã·ã¥å¤ãç¨ãã index.html ãªã½ã¼ã¹ã®ããã·ã¥å¤ã 33a64df5 ã®å ´åãã¬ã¹ãã³ã¹ã¯ä»¥ä¸ã®ããã«ãªãã¾ãã
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1024
Date: Tue, 22 Feb 2022 22:22:22 GMT
ETag: "33a64df5"
Cache-Control: max-age=3600
<!doctype html>
â¦
ãã®ã¬ã¹ãã³ã¹ãå¤ãã£ãå ´åãã¯ã©ã¤ã¢ã³ãã¯ãã£ãã·ã¥ãããã¬ã¹ãã³ã¹ã® ETag ã¬ã¹ãã³ã¹ãããã¼ã®å¤ãåãåããããã If-None-Match ãªã¯ã¨ã¹ããããã¼ã«å
¥ãããªã½ã¼ã¹ã夿´ããããã©ããããµã¼ãã¼ã«åãåããã¾ãã
GET /index.html HTTP/1.1
Host: example.com
Accept: text/html
If-None-Match: "33a64df5"
ãªã¯ã¨ã¹ãããããªã½ã¼ã¹ã® ETag ãããã¼ã®å¤ããªã¯ã¨ã¹ãã® If-None-Match ã®å¤ã¨åãå ´åããµã¼ãã¼ã¯ 304 Not Modified ãè¿ãã¾ãã
ãããããªã¯ã¨ã¹ãããããªã½ã¼ã¹ãããã§ç°ãªã ETag å¤ãæã¤ããã«ãªã£ãã¨ãµã¼ãã¼ã夿ããå ´åããµã¼ãã¼ã¯ä»£ããã« 200 OK ã¨ãªã½ã¼ã¹ã®ææ°ãã¼ã¸ã§ã³ã§å¿çãã¾ãã
ã¡ã¢:
RFC9110 ã§ã¯ãã§ããã° 200 ã¬ã¹ãã³ã¹ã«å¯¾ã㦠ETag 㨠Last-Modified ã®ä¸¡æ¹ãéä¿¡ãããã¨ãæ¨å¥¨ãã¦ãã¾ãã
ãã£ãã·ã¥ã®åæ¤è¨¼ã®éã«ã If-Modified-Since 㨠If-None-Match ã®ä¸¡æ¹ãåå¨ããå ´åã¯ã If-None-Match ãåªå
ãã¾ãã
ãã£ãã·ã¥ã ããèãã¦ããã®ã§ããã°ã Last-Modified ã¯ä¸è¦ã ã¨æãããããã¾ããã
ãããã Last-Modified ã¯ãã£ãã·ã¥ã«æçãªã ãã§ã¯ãªããã³ã³ãã³ã管ç (CMS) ã·ã¹ãã ãæçµæ´æ°æå»ã表示ããããã¯ãã¼ã©ã¼ãã¯ãã¼ã«é »åº¦ã調æ´ããããä»ã«ãæ§ã
ãªç®çã§ä½¿ç¨ããæ¨æº HTTP ãããã¼ã§ãã
ãã®ããã HTTP ã¨ã³ã·ã¹ãã å
¨ä½ãèæ
®ããã¨ã ETag 㨠Last-Modified ã®ä¸¡æ¹ãæä¾ããæ¹ãè¯ãã§ãããã
å¼·å¶çãªåæ¤è¨¼
ã¬ã¹ãã³ã¹ãåå©ç¨ãããå¸¸ã«ææ°ã®ã³ã³ãã³ãããµã¼ãã¼ããåå¾ãããå ´åã¯ã no-cache ãã£ã¬ã¯ãã£ãã使ç¨ãã¦å¼·å¶çã«æ¤è¨¼ãããã¨ãã§ãã¾ãã
ã¬ã¹ãã³ã¹ã« Cache-Control: no-cache ã Last-Modified 㨠ETag ã¨ã¨ãã«è¿½å ãããã¨ã§ãä¸è¨ã§ç¤ºãããã«ããªã¯ã¨ã¹ãããããªã½ã¼ã¹ãæ´æ°ããã¦ããã°ã¯ã©ã¤ã¢ã³ã㯠200 OK ã¬ã¹ãã³ã¹ãåãåããæ´æ°ããã¦ããªããã° 304 Not Modified ã¬ã¹ãã³ã¹ãåãåãã¾ãã
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1024
Date: Tue, 22 Feb 2022 22:22:22 GMT
Last-Modified: Tue, 22 Feb 2022 22:00:00 GMT
ETag: "deadbeef"
Cache-Control: no-cache
<!doctype html>
â¦
max-age=0㨠must-revalidate ã®çµã¿åãã㯠no-cache ã¨åãæå³ãæã¤ã¨ããè¨ããã¦ãã¾ãã
Cache-Control: max-age=0, must-revalidate
max-age=0 ã¯ã¬ã¹ãã³ã¹ãå³åº§ã«å¤ããªããã¨ãæå³ãã¦ããã must-revalidate ã¯å¤ããªã£ãã¬ã¹ãã³ã¹ãåæ¤è¨¼ããã«åå©ç¨ãã¦ã¯ãããªããã¨ãæå³ãã¦ãã¾ããã¤ã¾ãããã®çµã¿åããã®æå³ã¯ no-cache ã¨åãã§ãã
ãããããã® max-age=0 ã使ç¨ãããã¨ã¯ãHTTP/1.1 ããåã®å®è£
ã®å¤ãã no-cache ãã£ã¬ã¯ãã£ããå¦çãããã¨ãã§ããªãã£ããã¨ã®åæ®ã§ãããã®ããããã®å¶éã«å¯¾å¦ããããã«ãåé¿çã¨ã㦠max-age=0 ã使ç¨ãã¦ãã¾ããã
ããããããã§ HTTP/1.1 æºæ ã®ãµã¼ãã¼ãåºãæ®åããããã max-age=0 㨠must-revalidate ã®çµã¿åããã使ç¨ããçç±ã¯ãªããªãã¾ããã
ãã£ãã·ã¥ããªã
no-cache ãã£ã¬ã¯ãã£ãã¯ã¬ã¹ãã³ã¹ãæ ¼ç´ããªãããã«ããã®ã§ã¯ãªããåæ¤è¨¼ããã«ã¬ã¹ãã³ã¹ãåå©ç¨ããªãããã«ãã¾ãã
ã¬ã¹ãã³ã¹ããã£ãã·ã¥ã«æ ¼ç´ããããªãå ´åã¯ã no-store ã使ç¨ãã¦ãã ããã
Cache-Control: no-store
ããããä¸è¬çã«ãããã£ãã·ã¥ããªããã¨ããè¦ä»¶ã¯ãå®éã«ã¯ä»¥ä¸ã®ãããªè¨å®ã«ãªãã¾ãã
- ãã©ã¤ãã·ã¼ä¿è·ã®ãããç¹å®ã®ã¯ã©ã¤ã¢ã³ã以å¤ã«ã¬ã¹ãã³ã¹ãæ ¼ç´ãããããªãå ´åã
- å¸¸ã«ææ°ã®æ å ±ãæä¾ãããå ´åã
- æä»£é ãã®å®è£ ã§ãããä½ãèµ·ãããåãããªãå ´åã
ãã®ãããªç¶æ³ã§ã¯ã no-store ã¯å¸¸ã«é©åãªãã£ã¬ã¯ãã£ãã¨ã¯éãã¾ããã
次ã®ç¯ã§ã¯ããã®ç¶æ³ããã詳ããè¦ã¦ããã¾ãã
ä»ã®äººã¨å ±æããªãããã«ãã
ãã¼ã½ãã©ã¤ãºãããã³ã³ãã³ããå«ãã¬ã¹ãã³ã¹ããäºæãããã£ãã·ã¥ã®ä»ã®ã¦ã¼ã¶ã¼ã«è¦ãã¦ãã¾ãã®ã¯åé¡ã§ãã
ãã®ãããªå ´åãprivate ãã£ã¬ã¯ãã£ãã使ç¨ãããã¨ã§ããã¼ã½ãã©ã¤ãºãããã¬ã¹ãã³ã¹ã¯ç¹å®ã®ã¯ã©ã¤ã¢ã³ãã«ã®ã¿æ ¼ç´ãããä»ã®ãã£ãã·ã¥ã¦ã¼ã¶ã¼ã«æ¼ãããã¨ã¯ãªããªãã¾ãã
Cache-Control: private
ãã®ãããªå ´åã no-store ãæå®ããã¨ãã¦ãã private ãæå®ããªããã°ãªãã¾ããã
å¸¸ã«ææ°ã®ã³ã³ãã³ããæä¾ãã
no-store ãã£ã¬ã¯ãã£ãã¯ã¬ã¹ãã³ã¹ãæ ¼ç´ããããã¨ãé²ãã¾ãããåã URL ã«å¯¾ãã¦æ¢ã«æ ¼ç´ããã¦ããã¬ã¹ãã³ã¹ãåé¤ãããã¨ã¯ããã¾ããã
è¨ãæããã°ãç¹å®ã® URL ã«å¯¾ãã¦å¤ãã¬ã¹ãã³ã¹ãæ¢ã«æ ¼ç´ããã¦ããå ´åã no-store ãè¿ãã¦ãå¤ãã¬ã¹ãã³ã¹ãåå©ç¨ããããã¨ã¯ããã¾ããã
ããããno-cache ãã£ã¬ã¯ãã£ãã¯æ ¼ç´ãããã¬ã¹ãã³ã¹ãåå©ç¨ããããã«ã ã¯ã©ã¤ã¢ã³ãã«æ¤è¨¼ãªã¯ã¨ã¹ããéããã¾ãã
Cache-Control: no-cache
ãµã¼ãã¼ãæ¡ä»¶ä»ããªã¯ã¨ã¹ãã«å¯¾å¿ãã¦ããªãå ´åã¯ãã¯ã©ã¤ã¢ã³ãã«æ¯åãµã¼ãã¼ã«ã¢ã¯ã»ã¹ããããã«å¼·å¶ãã常㫠200 OK ã§ææ°ã®ã¬ã¹ãã³ã¹ãåå¾ãããã¨ãã§ãã¾ãã
å¤ãå®è£ ã¸ã®å¯¾å¿
no-store ãç¡è¦ããå¤ãå®è£
ãåé¿ããããã«ã以ä¸ã®ãããªãããã³ã·ã³ã¯ã®ãããªãããã¼ã使ç¨ããã¦ããããããã¾ããã
Cache-Control: no-store, no-cache, max-age=0, must-revalidate, proxy-revalidate
æ¨å¥¨ ããã¦ããæ¹æ³ã¯ããã®ãããªå¤ãå®è£
ã«å¯¾å¦ããããã«ä»£æ¿ææ®µã¨ã㦠no-cache ã使ç¨ãããã¨ã§ããã¾ããno-cache ãæåããæå®ããã¦ãã¦ãããµã¼ãã¼ã¯å¸¸ã«ãªã¯ã¨ã¹ããåãåãã®ã§åé¡ããã¾ããã
ããæ°ã«ãªãã®ãå
±æãã£ãã·ã¥ã§ããã°ã private ã追å ãããã¨ã§ãæå³ããªããã£ãã·ã¥ãé²ããã¨ãã§ãã¾ãã
Cache-Control: no-cache, private
no-store ã§å¤±ããããã®
no-store ã追å ãããã¨ã¯ããã£ãã·ã¥ããªããã¢ã¦ãããããã«æ£ããæ¹æ³ã ã¨æãããããã¾ããã
ããããno-store ãèªç±ã«è¨±å¯ãããã¨ã¯æ¨å¥¨ããã¾ããããã©ã¦ã¶ã¼ã®ããã¯/ãã©ã¯ã¼ããã£ãã·ã¥ãå«ããããã«ã HTTP ã¨ãã©ã¦ã¶ã¼ãæã¤å¤ãã®å©ç¹ã失ã£ã¦ãã¾ãããã§ãã
ãããã£ã¦ãã¦ã§ããã©ãããã©ã¼ã ã®å
¨æ©è½ã®å©ç¹ã享åããã«ã¯ã no-cache ã private ã¨çµã¿åããã¦ä½¿ç¨ãããã¨ãæ¨å¥¨ãã¾ãã
åèªã¿è¾¼ã¿ã¨å¼·å¶åèªã¿è¾¼ã¿
æ¤è¨¼ã¯ã¬ã¹ãã³ã¹ã ãã§ãªãããªã¯ã¨ã¹ãã«å¯¾ãã¦ãè¡ããã¨ãã§ãã¾ãã
åèªã¿è¾¼ã¿ (reload) ã¨å¼·å¶åèªã¿è¾¼ã¿ (force reload) ã¯ããã©ã¦ã¶ã¼å´ããå®è¡ãããæ¤è¨¼ã®ä¸è¬çãªä¾ã§ãã
åèªã¿è¾¼ã¿
ã¦ã£ã³ãã¦ã®ç ´æããã®å復ããªã½ã¼ã¹ã®ææ°ãã¼ã¸ã§ã³ã¸ã®æ´æ°ã®ããã«ããã©ã¦ã¶ã¼ã¯ã¦ã¼ã¶ã¼ã«åèªã¿è¾¼ã¿æ©è½ãæä¾ãã¦ãã¾ãã
ãã©ã¦ã¶ã¼ã®åèªã¿è¾¼ã¿ä¸ã«éä¿¡ããã HTTP ãªã¯ã¨ã¹ããç°¡ç¥åããã¨ã以ä¸ã®ããã«ãªãã¾ãã
GET / HTTP/1.1
Host: example.com
Cache-Control: max-age=0
If-None-Match: "deadbeef"
If-Modified-Since: Tue, 22 Feb 2022 20:20:20 GMT
ï¼ChromeãEdgeãFirefox ããã®ãªã¯ã¨ã¹ãã¯ä¸è¨ã®ãã®ã«ã¨ã¦ãããä¼¼ã¦ãã¾ãã Safari ããã®ãªã¯ã¨ã¹ãã¯å¤å°ç°ãªãã¾ããï¼
ãªã¯ã¨ã¹ãã® max-age=0 ãã£ã¬ã¯ãã£ãã¯ããage ã 0 以ä¸ã®ã¬ã¹ãã³ã¹ã®åå©ç¨ããæå®ãã¾ããã¤ã¾ããäºå®ä¸ãä¸éã§æ ¼ç´ãããã¬ã¹ãã³ã¹ã¯åå©ç¨ããã¾ããã
ãã®çµæããªã¯ã¨ã¹ã㯠If-None-Match 㨠If-Modified-Since ã«ãã£ã¦æ¤è¨¼ããã¾ãã
ãã®åä½ã¯ãã§ããæ¨æºã§ãå®ç¾©ããã¦ãããJavaScript ã§ãã£ãã·ã¥ã¢ã¼ãã no-cache ã«è¨å®ã㦠fetch() ãå¼ã³åºããã¨ã§åç¾ãããã¨ãã§ãã¾ãï¼ãã®å ´å reload ã¯æ£ããã¢ã¼ãã§ã¯ãªããã¨ã«æ³¨æãã¦ãã ããï¼ã
// ã¡ã¢: "reload" ã¯é常ã®åèªã¿è¾¼ã¿ã«ã¯æ£ããã¢ã¼ãã§ã¯ããã¾ããã "no-cache" ã§ãã
fetch("/", { cache: "no-cache" });
å¼·å¶åèªã¿è¾¼ã¿
ãã©ã¦ã¶ã¼ããªãã¼ãæã« max-age=0 ã使ç¨ããã®ã¯ã HTTP/1.1 ããåã®å¤ãå®è£
ã®å¤ãã no-cache ãçè§£ãã¦ããªãã£ãããã§ãããããã no-cache ã¯ãã®ç¨éã§ã¯ããã§åé¡ãªããå¼·å¶åèªã¿è¾¼ã¿ã¯ãã£ãã·ã¥ãããã¬ã¹ãã³ã¹ããã¤ãã¹ããããã®è¿½å ã®æ¹æ³ã§ãã
ãã©ã¦ã¶ã¼ã å¼·å¶åèªã¿è¾¼ã¿ãã¦ããã¨ãã® HTTP ãªã¯ã¨ã¹ãã¯ä»¥ä¸ã®ããã«ãªãã¾ãã
GET / HTTP/1.1
Host: example.com
Pragma: no-cache
Cache-Control: no-cache
ï¼ChromeãEdgeãFirefox ããã®ãªã¯ã¨ã¹ãã¯ä¸è¨ã®ãã®ã«ã¨ã¦ãããä¼¼ã¦ãã¾ãã Safari ããã®ãªã¯ã¨ã¹ãã¯å¤å°ç°ãªãã¾ããï¼
ãã㯠no-cache ã«ããæ¡ä»¶ä»ããªã¯ã¨ã¹ãã§ã¯ãªãã®ã§ãå
ã®ãµã¼ãã¼ãã 200 OK ãåå¾ãããã¨ã¯ç¢ºå®ã§ãã
ãã®åä½ã¯ãã§ããæ¨æºã§ãå®ç¾©ããã¦ãããJavaScript ã§ãã£ãã·ã¥ã¢ã¼ãã reload ã«ã㦠fetch() ãå¼ã³åºããã¨ã§åç¾ã§ãã¾ãï¼force-reload ã§ã¯ãªããã¨ã«æ³¨æãã¦ãã ããï¼ã
// ã¡ã¢: "reload" ï¼"no-cache" ã§ã¯ãªãï¼ã¯ãå¼·å¶åèªã¿è¾¼ã¿ãã§æ£ããã¢ã¼ãã§ãã
fetch("/", { cache: "reload" });
åæ¤è¨¼ã®åé¿
夿´ããããã¨ã®ãªãã³ã³ãã³ãã«ã¯ããã£ãã·ã¥ãã¹ãã£ã³ã°ãã¤ã¾ãããªã¯ã¨ã¹ã URL ã«ãã¼ã¸ã§ã³çªå·ãããã·ã¥å¤ãªã©ãå«ãããã¨ã«ãããé·ã max-age ãæå®ãã¦ãã ããã
ããããã¦ã¼ã¶ã¼ãåèªã¿è¾¼ã¿ããã¨ããã¨ããµã¼ãã¼ããã®ã³ã³ãã³ããä¸å¤ã§ãããã¨ãç¥ã£ã¦ããã¨ãã¦ããåæ¤è¨¼ãªã¯ã¨ã¹ããéããã¾ãã
ãããé²ãããã«ãimmutable ãã£ã¬ã¯ãã£ãã使ç¨ãã¦ãã³ã³ãã³ãã¯å¤æ´ãããªãã®ã§åæ¤è¨¼ã¯ä¸è¦ã§ãããã¨ãæç¤ºãããã¨ãã§ãã¾ãã
Cache-Control: max-age=31536000, immutable
ããã«ãããåèªã¿è¾¼ã¿æã®ä¸è¦ãªåæ¤è¨¼ãé²ããã¨ãã§ãã¾ãã
ãã®ãã£ã¬ã¯ãã£ããå®è£ ãã代ããã«ã Chrome ã¯å®è£ ã夿´ãããµããªã½ã¼ã¹ã®åèªã¿è¾¼ã¿ä¸ã«åæ¤è¨¼ãè¡ããªãããã«ãã¾ããã
æ ¼ç´ãããã¬ã¹ãã³ã¹ã®åé¤
é·ã max-age ã§æ ¼ç´ãããã¬ã¹ãã³ã¹ããä¸éãµã¼ãã¼ããåé¤ããæ¹æ³ã¯ããã¾ããã
ä¾ãã°ã以ä¸ã®ããã« https://example.com/ ããã®ã¬ã¹ãã³ã¹ãæ ¼ç´ããã¦ããã¨ãã¾ãã
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1024
Cache-Control: max-age=31536000
<!doctype html>
â¦
ãµã¼ãã¼ä¸ã§æå¹æéãåããã¬ã¹ãã³ã¹ã䏿¸ããããã¨æãããããã¾ããããã¬ã¹ãã³ã¹ãæ ¼ç´ãããã¨ããã£ãã·ã¥ã«ãããã以ä¸ã®ãªã¯ã¨ã¹ãããµã¼ãã¼ã«å°éããªãããããµã¼ãã¼å´ã§ã§ãããã¨ã¯ã¾ã ããã¾ããã
仿§ã§è¨åããã¦ããæ¹æ³ã® 1 ã¤ã¯ãPOST ãªã©ã®å®å
¨ã§ãªãã¡ã½ããã使ç¨ãã¦åã URL ã¸ã®ãªã¯ã¨ã¹ããéä¿¡ãããã¨ã§ãããå¤ãã®ã¯ã©ã¤ã¢ã³ãã§ã¯ããã¯å°é£ã§ãã
Clear-Site-Data: cache ãããã¼ããã³ãã£ã¬ã¯ãã£ãå¤ã¯ããã©ã¦ã¶ã¼ã®ãã£ãã·ã¥ãã¯ãªã¢ããããã«ä½¿ç¨ã§ãã¾ãããä¸éãã£ãã·ã¥ã«ã¯å¹æã¯ããã¾ããã
ãã以å¤ã®å ´åãã¦ã¼ã¶ã¼ãæåã§åèªã¿è¾¼ã¿ãå¼·å¶åèªã¿è¾¼ã¿ãã¾ãã¯å±¥æ´ã®ã¯ãªã¢æä½ãè¡ããªãéããã¬ã¹ãã³ã¹ã¯ max-age ã®æå¹æéãåããã¾ã§ãã©ã¦ã¶ã¼ã®ãã£ãã·ã¥ã«æ®ãã¾ãã
ãã£ãã·ã¥ã¯ãµã¼ãã¼ã¸ã®ã¢ã¯ã»ã¹ã忏ãããµã¼ãã¼ããã® URL ã®å¶å¾¡ã失ããã¨ãæå³ãã¦ãã¾ãããµã¼ãã¼ã URL ã®å¶å¾¡ã失ããããªãå ´åãä¾ãã°ãªã½ã¼ã¹ãé »ç¹ã«æ´æ°ããããããªå ´åã no-cache ã追å ãã¦ããµã¼ãã¼ã常ã«ãªã¯ã¨ã¹ããåãåããæå³ããã¬ã¹ãã³ã¹ãéä¿¡ã§ããããã«ããå¿
è¦ãããã¾ãã
ãªã¯ã¨ã¹ãã®æãããã¿
å ±æãã£ãã·ã¥ã¯ä¸»ã«å ã®ãµã¼ãã¼ã®åã«ãããå ã®ãµã¼ãã¼ã¸ã®ãã©ãã£ãã¯ã忏ãããã¨ãæå³ãã¦ãã¾ãã
ãããã£ã¦ãè¤æ°ã®åããªã¯ã¨ã¹ããåæã«å ±æãã£ãã·ã¥ã«å°çããå ´åã ä¸éãã£ãã·ã¥ã¯ããèªèº«ã«ä»£ãã£ã¦åä¸ã®ãªã¯ã¨ã¹ãããªãªã¸ã³ã«è»¢éãã ãã®çµæããã¹ã¦ã®ã¯ã©ã¤ã¢ã³ãã«åå©ç¨ãããã¨ãããã¾ããããã¯ãªã¯ã¨ã¹ãã®æãããã¿ã¨å¼ã°ãã¾ãã
ãªã¯ã¨ã¹ãã®æãããã¿ã¯ãªã¯ã¨ã¹ããåæã«å°çããã¨ãã«èµ·ããã®ã§ãã¬ã¹ãã³ã¹ã« max-age=0 ã no-cache ãæå®ãããã¨ãã¦ããåå©ç¨ããã¾ãã
ã¬ã¹ãã³ã¹ãå
·ä½çãªã¦ã¼ã¶ã¼ã«ãã¼ã½ãã©ã¤ãºããã¦ãã¦ãæãããã¿æã«å
±æãããããªãå ´å㯠private ãã£ã¬ã¯ãã£ãã追å ãã¦ãã ããã
è¯ããããã£ãã·ã¥ãã¿ã¼ã³
Cache-Control ã®ä»æ§ã«ã¯å¤ãã®ãã£ã¬ã¯ãã£ããããããã¹ã¦ãçè§£ããã®ã¯é£ããããããã¾ãããããããã»ã¨ãã©ã®ã¦ã§ããµã¤ãã¯ä¸æ¡ãã®ãã¿ã¼ã³ã®çµã¿åããã§ã«ãã¼ãããã¨ãã§ãã¾ãã
ãã®ç« ã§ã¯ããã£ãã·ã¥ãè¨è¨ããéã®ä¸è¬çãªãã¿ã¼ã³ãè¨è¿°ãã¾ãã
æ¢å®ã®è¨å®
ä¸è¨ã®ããã«ããã£ãã·ã¥ã®æ¢å®å¤ï¼ã¤ã¾ã Cache-Control ã®ãªãã¬ã¹ãã³ã¹ï¼ã¯åç´ã«ããã£ãã·ã¥ããªããã§ã¯ãªããããããããã¥ã¼ãªã¹ãã£ãã¯ãã£ãã·ã¥ãã«å¾ã£ãæé»çãªãã£ãã·ã¥ã§ãã
ãã¥ã¼ãªã¹ãã£ãã¯ãã£ãã·ã¥ãé¿ããããã«ã¯ããã¹ã¦ã®ã¬ã¹ãã³ã¹ã«æ¢å®å¤ã® Cache-Control ãããã¼ãæç¤ºçã«ä»ä¸ãããã¨ãæ¨å¥¨ããã¾ãã
æ¢å®å¤ã§ã¯å¸¸ã«ææ°ãã¼ã¸ã§ã³ã®ãªã½ã¼ã¹ã転éããããã«ä¿æããããã«ãæ¢å®å¤ã® Cache-Control ã« no-cache ãå«ããã®ãä¸è¬çã§ãã
Cache-Control: no-cache
ã¾ãããµã¼ãã¹ã¯ã¼ã«ã¼ã¹ã¯ãªããã Cookie ãä»ã®ãã°ã¤ã³ã¡ã½ãããå®è£
ãã¦ãããã³ã³ãã³ããã¦ã¼ã¶ã¼ãã¨ã«ãã¼ã½ãã©ã¤ãºããã¦ããå ´åã¯ãä»ã®ã¦ã¼ã¶ã¼ã¨å
±æãããªãããã« private ãæå®ãããªããã°ãªãã¾ããã
Cache-Control: no-cache, private
ãã£ãã·ã¥ã®ç ´æ£
ãã£ãã·ã¥ã¨æããã¾ãåä½ãããªã½ã¼ã¹ã¯ãã³ã³ãã³ãã夿´ããããã¨ã®ãªãéçã§ä¸å¤ãªãã¡ã¤ã«ã§ããããã¦ã夿´ããããªã½ã¼ã¹ã«ã¤ãã¦ã¯ãã³ã³ãã³ãã夿´ããããã³ã« URL ã夿´ãã URL åä½ã詳ãããã£ãã·ã¥ã§ããããã«ããã®ãä¸è¬çãªãã¹ããã©ã¯ãã£ã¹ã§ãã
ä¾ãã°ã次ã®ãã㪠HTML ãèãã¦ã¿ã¾ãããã
<script src="bundle.js"></script>
<link rel="stylesheet" href="build.css" />
<body>
hello
</body>
ç¾ä»£ã®ã¦ã§ãéçºã§ã¯ãéçºã®é²æã«å¿ã㦠JavaScript ã CSS ã®ãªã½ã¼ã¹ãé »ç¹ã«æ´æ°ããã¾ããã¾ããã¯ã©ã¤ã¢ã³ãã使ç¨ãã JavaScript ã CSS ãªã½ã¼ã¹ã®ãã¼ã¸ã§ã³ãããã¦ããã¨ã表示ãå´©ãã¦ãã¾ãã¾ãã
ãã®ãããä¸è¨ã® HTML ã§ã¯ bundle.js 㨠build.css ã max-age ã§ãã£ãã·ã¥ãããã¨ãé£ãããªã£ã¦ãã¾ãã
å¾ã£ã¦ã JavaScript 㨠CSS ããã¼ã¸ã§ã³çªå·ãããã·ã¥å¤ã«åºã¥ãã¦å¤æ´ããé¨åãå«ãã URL ã§æä¾ãããã¨ãã§ãã¾ãããã®æ¹æ³ã®ããã¤ããä¸è¨ã«ç¤ºãã¾ãã
# ãã¡ã¤ã«åã«ãã¼ã¸ã§ã³ãå ¥ãã bundle.v123.js # ã¯ã¨ãªã¼ã«ãã¼ã¸ã§ã³ãå ¥ãã bundle.js?v=123 # ãã¡ã¤ã«åã«ããã·ã¥ãå ¥ãã bundle.YsAIAAAA-QG4G6kCMAMBAAAAAAAoK.js # ã¯ã¨ãªã¼ã«ããã·ã¥ãå ¥ãã bundle.js?v=YsAIAAAA-QG4G6kCMAMBAAAAAAAoK
ãã£ãã·ã¥ã¯ URL ã«åºã¥ãã¦ãªã½ã¼ã¹ãå¤å¥ããã®ã§ããªã½ã¼ã¹ãæ´æ°ãããã¨ãã« URL ã夿´ãããã¨ããã£ãã·ã¥ã¯åå©ç¨ããã¾ããã
<script src="bundle.v123.js"></script>
<link rel="stylesheet" href="build.v123.css" />
<body>
hello
</body>
ãã®è¨è¨ã§ããã°ã JavaScript ã CSS ãªã½ã¼ã¹ãé·æéãã£ãã·ã¥ãããã¨ãã§ãã¾ããã§ã¯ã max-age ã¯ã©ããããã®é·ãã«è¨å®ããã¹ããªã®ã§ããããï¼ QPACK 仿§ããã®çããæä¾ãã¦ãã¾ãã
QPACK 㯠HTTP ãããã¼ãã£ã¼ã«ããå§ç¸®ããããã®æ¨æºã§ãããä¸è¬çã«ä½¿ç¨ãããã£ã¼ã«ãå¤ã®è¡¨ãå®ç¾©ããã¦ãã¾ãã
ä¸è¬çã«ä½¿ç¨ãããã£ãã·ã¥ãããã¼ã®å¤ãä¸è¨ã«ç¤ºãã¾ãã
36 cache-control max-age=0 37 cache-control max-age=604800 38 cache-control max-age=2592000 39 cache-control no-cache 40 cache-control no-store 41 cache-control public, max-age=31536000
ãããã®çªå·ä»ããªãã·ã§ã³ã®ããããã鏿ããã¨ã HTTP3 ã§è»¢éããã¨ãã«å¤ã 1 ãã¤ãã«å§ç¸®ãããã¨ãã§ãã¾ãã
çªå· 37, 38, 41 㯠1 é±éã 1 ã¶æã 1 å¹´ã®æéã§ãã
ãã£ãã·ã¥ã¯æ°ããé
ç®ãä¿åãããã¨å¤ãé
ç®ãé¤å»ããã®ã§ã max-age ã 1 é±éã«è¨å®ããã¦ããã¨ãã¦ãã 1 é±éå¾ã«æ ¼ç´ãããã¬ã¹ãã³ã¹ãåå¨ãã確çã¯ããã»ã©é«ãããã¾ããããããã£ã¦ãå®éã«ã¯ã©ã¡ããé¸ãã§ããã¾ãéãã¯ããã¾ããã
41 çªãæãé·ã max-age ï¼1 å¹´ï¼ãæã£ã¦ãã¾ããã public ãä»ãã¦ãããã¨ã«æ³¨æãã¦ãã ããã
public å¤ã¯ Authorization ãããã¼ã表示ãã¦ããå ´åã§ããã¬ã¹ãã³ã¹ãä¿åã§ããããã«ãã广ãããã¾ãã
ã¡ã¢:
public ãã£ã¬ã¯ãã£ã㯠Authorization ãããã¼ãè¨å®ãããã¨ãã«ã¬ã¹ãã³ã¹ãæ ¼ç´ããå¿
è¦ãããå ´åã«ã®ã¿ä½¿ç¨ãã¦ãã ããã
max-age ãæå®ããã¦ããéããã¬ã¹ãã³ã¹ã¯å
±æãã£ãã·ã¥ã«æ ¼ç´ãããããã§ãã
ãã®ãããã¬ã¹ãã³ã¹ãåºæ¬çãªèªè¨¼ã§ãã¼ã½ãã©ã¤ãºããã¦ããå ´åã public ãããã¨åé¡ãçºçããå¯è½æ§ãããã¾ãããããããå¿é
ãªãã 2 ã¤ç®ã®å¤ã§ãã 38 ï¼1 ã¶æï¼ãé¸ã¶ãã¨ãã§ãã¾ãã
# bundle.v123.js ã¸ã®ã¬ã¹ãã³ã¹
# èªè¨¼ã«ãããã¼ã½ãã©ã¤ãºããããã¨ããªãå ´å
Cache-Control: public, max-age=31536000
# 確信ãæã¦ãªãå ´å
Cache-Control: max-age=2592000
æ¤è¨¼
åèªã¿è¾¼ã¿æã«ãªã½ã¼ã¹ãåéä¿¡ããå¿
è¦ããªãããã«ã Last-Modified ãããã¼ã¨ ETag ãããã¼ãè¨å®ãããã¨ãå¿ããªãã§ãã ããããã«ãæ¸ã¿ã®éçãã¡ã¤ã«ã«å¯¾ãã¦ãããã®ãããã¼ãçæããã®ã¯ç°¡åã§ãã
ããã§ã® ETag å¤ã¯ãã¡ã¤ã«ã®ããã·ã¥ã§ãã
# bundle.v123.js ã¸ã®ã¬ã¹ãã³ã¹
Last-Modified: Tue, 22 Feb 2022 20:20:20 GMT
ETag: "YsAIAAAA-QG4G6kCMAMBAAAAAAAoK"
ããã«ã immutable ã追å ãããã¨ã§ãåèªã¿è¾¼ã¿æã®æ¤è¨¼ãé²ããã¨ãã§ãã¾ãã
çµã¿åãããçµæãä¸è¨ã«ç¤ºãã¾ãã
# bundle.v123.js
HTTP/1.1 200 OK
Content-Type: text/javascript
Content-Length: 1024
Cache-Control: public, max-age=31536000, immutable
Last-Modified: Tue, 22 Feb 2022 20:20:20 GMT
ETag: "YsAIAAAA-QG4G6kCMAMBAAAAAAAoK"
ãã£ãã·ã¥ç ´æ£ã¯ãã³ã³ãã³ãã夿´ãããã¨ãã« URL ã夿´ãããã¨ã§ãé·æéã«ããã£ã¦ã¬ã¹ãã³ã¹ããã£ãã·ã¥å¯è½ã«ãããã¯ããã¯ã§ãããã®ãã¯ããã¯ã¯ãç»åãªã©ã®ãã¹ã¦ã®ãµããªã½ã¼ã¹ã«é©ç¨ã§ãã¾ãã
ã¡ã¢:
immutable 㨠QPACK ã使ç¨ãããã¨ãè©ä¾¡ããå ´åï¼
ãã immutable ã QPACK ãæä¾ããå®ç¾©æ¸ã¿ã®å¤ã夿´ãããã¨ãæ¸å¿µãã¦ããã®ã§ããã°ã Cache-Control å¤ã 2 è¡ã«åå²ãããã¨ã§ãimmutable ã®é¨åãå¥åã®æåã«ã¨ã³ã³ã¼ããããã¨ãã§ããã¨èãããã¨ãã§ãã¾ãããã ããããã¯ç¹å®ã® QPACK å®è£
ãç¨ããã¨ã³ã³ã¼ãã£ã³ã°ã¢ã«ã´ãªãºã ã«ä¾åãã¾ãã
Cache-Control: public, max-age=31536000
Cache-Control: immutable
主è¦ãªã½ã¼ã¹
ã¡ã¤ã³ãªã½ã¼ã¹ã¯ãµããªã½ã¼ã¹ã¨ç°ãªããURLã®è£ 飾ãã§ããªãããããã£ãã·ã¥ç ´æ£ãã§ãã¾ããã
次㮠HTML ãã®ãã®ãæ ¼ç´ããã¦ããå ´åããµã¼ãã¼å´ã§ã³ã³ãã³ããæ´æ°ããã¦ãææ°çã表示ãããã¨ã¯ã§ãã¾ããã
<script src="bundle.v123.js"></script>
<link rel="stylesheet" href="build.v123.css" />
<body>
hello
</body>
ãã®å ´åã HTML ãæ ¼ç´ããããã§ã¯ãªããå¸¸ã«ææ°ã®ç¶æ
ã«ãããã ããªã®ã§ã no-store ã§ã¯ãªãã no-cache ãé©åã§ãããã
ããã«ã Last-Modified 㨠ETag ã追å ãããã¨ã§ãã¯ã©ã¤ã¢ã³ãã¯æ¡ä»¶ä»ãã®ãªã¯ã¨ã¹ããéããã¨ãã§ããããã«ãªããHTML ã«æ´æ°ããªãå ´å㯠304 Not Modified ãè¿ããã¨ãã§ããããã«ãªãã¾ãã
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1024
Cache-Control: no-cache
Last-Modified: Tue, 22 Feb 2022 20:20:20 GMT
ETag: "AAPuIbAOdvAGEETbgAAAAAAABAAE"
ãã®è¨å®ã¯ãã¼ã½ãã©ã¤ãºããã¦ããªã HTML ã«ã¯é©åã§ãããä¾ãã°ãã°ã¤ã³å¾ãªã©ãã¯ããã¼ã使ç¨ãã¦ãã¼ã½ãã©ã¤ãºãããã¬ã¹ãã³ã¹ã«ã¯ private ãæå®ãããã¨ãå¿ããªãã§ãã ããã
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1024
Cache-Control: no-cache, private
Last-Modified: Tue, 22 Feb 2022 20:20:20 GMT
ETag: "AAPuIbAOdvAGEETbgAAAAAAABAAE"
Set-Cookie: __Host-SID=AHNtAyt3fvJrUL5g5tnGwER; Secure; Path=/; HttpOnly
åããã¨ã¯ãfavicon.icoãmanifest.jsonã.well-knownããã£ãã·ã¥ç ´æ£ã使ç¨ã㦠URL ã夿´ã§ããªã API ã¨ã³ããã¤ã³ãã«ã使ç¨ãããã¨ãã§ãã¾ãã
ã»ã¨ãã©ã®ã¦ã§ãã³ã³ãã³ãã¯ãåè¿°ãã 2 ã¤ã®ãã¿ã¼ã³ã®çµã¿åããã«å¿ãã対å¿ãå¯è½ã§ãã
ããã¼ã¸ããã£ãã·ã¥ã®è©³ç´°
åç¯ã§èª¬æããã¡ã½ããã§ã¯ããã£ãã·ã¥ç ´æ£ã使ç¨ãããã¨ã§ãµããªã½ã¼ã¹ãé·æéãã£ãã·ã¥ãããã¨ãã§ãã¾ãããã¡ã¤ã³ãªã½ã¼ã¹ï¼é常㯠HTML ææ¸ï¼ã¯ãã£ãã·ã¥ãããã¨ãã§ãã¾ããã
ã¡ã¤ã³ãªã½ã¼ã¹ã®ãã£ãã·ã¥ãé£ããã®ã¯ãHTTP ãã£ãã·ã¥ä»æ§ã®æ¨æºãã£ã¬ã¯ãã£ãã使ç¨ããã ãã§ã¯ããµã¼ãã¼ã§ã³ã³ãã³ããæ´æ°ãããã¨ãã«ãã£ãã·ã¥ã®å 容ãç©æ¥µçã«åé¤ããæ¹æ³ããªãããã§ãã
ããããCDN ããµã¼ãã¹ã¯ã¼ã«ã¼ãªã©ã®ããã¼ã¸ããã£ãã·ã¥ãå±éãããã¨ã§ä½¿ç¨å¯è½ã§ãã
ä¾ãã°ãAPI ãããã·ã¥ãã¼ãã®å¦çã«ãã£ã¦ãã£ãã·ã¥ã®ç ´æ£ãå¯è½ãª CDN ã§ã¯ãã¡ã¤ã³ã®ãªã½ã¼ã¹ãæ ¼ç´ãããµã¼ãã¼ã§æ´æ°ãçºçããå ´åã«ã®ã¿é¢é£ãããã£ãã·ã¥ãæç¤ºçã«ç ´æ£ãããã¨ã§ãããç©æ¥µçãªãã£ãã·ã¥æ¦ç¥ãå¯è½ã«ãªãã¾ãã
ãµã¼ãã¹ã¯ã¼ã«ã¼ã¯ããµã¼ãã¼ã§æ´æ°ãçºçããã¨ãã«ãã£ãã·ã¥ API ã®ã³ã³ãã³ããåé¤ã§ããã°ãåããã¨ãã§ãã¾ãã
ãã詳ããæ å ±ã¯ã CDN ã®ããã¥ã¡ã³ãåã ãµã¼ãã¹ã¯ã¼ã«ã¼ã®ããã¥ã¡ã³ã ãåç §ãã¦ãã ããã