Cache-Control
åºçº¿
广æ³å¯ç¨
èª 2015å¹´7æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
Cache-Control éç¨æ¶æ¯å¤´å段ï¼è¢«ç¨äºå¨ http 请æ±åååºä¸ï¼éè¿æå®æä»¤æ¥å®ç°ç¼åæºå¶ãç¼åæä»¤æ¯ååçï¼è¿æå³çå¨è¯·æ±ä¸è®¾ç½®çæä»¤ï¼ä¸ä¸å®è¢«å
å«å¨ååºä¸ã
| Header type | General header |
|---|---|
| Forbidden request header | no |
| CORS-safelisted response-header | yes |
è¯æ³
æä»¤æ ¼å¼å ·æä»¥ä¸ææè§åï¼
- ä¸åºå大å°åï¼ä½å»ºè®®ä½¿ç¨å°åã
- å¤ä¸ªæä»¤ä»¥éå·åéã
- å ·æå¯éåæ°ï¼å¯ä»¥ç¨ä»¤çæè 带å¼å·çåç¬¦ä¸²è¯æ³ã
ç¼åè¯·æ±æä»¤
客æ·ç«¯å¯ä»¥å¨ HTTP 请æ±ä¸ä½¿ç¨çæ å Cache-Control æä»¤ã
Cache-Control: max-age=<seconds> Cache-Control: max-stale[=<seconds>] Cache-Control: min-fresh=<seconds> Cache-control: no-cache Cache-control: no-store Cache-control: no-transform Cache-control: only-if-cached
ç¼åååºæä»¤
æå¡å¨å¯ä»¥å¨ååºä¸ä½¿ç¨çæ å Cache-Control æä»¤ã
Cache-control: must-revalidate Cache-control: no-cache Cache-control: no-store Cache-control: no-transform Cache-control: public Cache-control: private Cache-control: proxy-revalidate Cache-Control: max-age=<seconds> Cache-control: s-maxage=<seconds>
æ©å±Cache-Controlæä»¤
æå±ç¼åæä»¤ä¸æ¯æ ¸å¿ HTTP ç¼åæ åææ¡£çä¸é¨åï¼ä½¿ç¨åè¯·æ³¨ææ£æ¥å ¼å®¹æ§ï¼
Cache-control: immutable Cache-control: stale-while-revalidate=<seconds> Cache-control: stale-if-error=<seconds>
æä»¤
>å¯ç¼åæ§
public-
表æååºå¯ä»¥è¢«ä»»ä½å¯¹è±¡ï¼å æ¬ï¼åé请æ±ç客æ·ç«¯ï¼ä»£çæå¡å¨ï¼ççï¼ç¼åï¼å³ä½¿æ¯é常ä¸å¯ç¼åçå 容ãï¼ä¾å¦ï¼1.该ååºæ²¡æ
max-ageæä»¤æExpiresæ¶æ¯å¤´ï¼2. 该ååºå¯¹åºçè¯·æ±æ¹æ³æ¯ POST ãï¼ private-
表æååºåªè½è¢«åä¸ªç¨æ·ç¼åï¼ä¸è½ä½ä¸ºå ±äº«ç¼åï¼å³ä»£çæå¡å¨ä¸è½ç¼åå®ï¼ãç§æç¼åå¯ä»¥ç¼åååºå å®¹ï¼æ¯å¦ï¼å¯¹åºç¨æ·çæ¬å°æµè§å¨ã
no-cache-
å¨åå¸ç¼å坿¬ä¹åï¼å¼ºå¶è¦æ±ç¼åæè¯·æ±æäº¤ç»åå§æå¡å¨è¿è¡éªè¯ (ååç¼åéªè¯)ã
no-store-
ç¼åä¸åºåå¨æå ³å®¢æ·ç«¯è¯·æ±ææå¡å¨ååºçä»»ä½å 容ï¼å³ä¸ä½¿ç¨ä»»ä½ç¼åã
å°æ
max-age=<seconds>-
设置ç¼ååå¨çæå¤§å¨æï¼è¶ è¿è¿ä¸ªæ¶é´ç¼åè¢«è®¤ä¸ºè¿æ (åä½ç§)ãä¸
Expiresç¸åï¼æ¶é´æ¯ç¸å¯¹äºè¯·æ±çæ¶é´ã s-maxage=<seconds>-
è¦ç
max-ageæèExpires头ï¼ä½æ¯ä» éç¨äºå ±äº«ç¼å (æ¯å¦å个代ç)ï¼ç§æç¼åä¼å¿½ç¥å®ã max-stale[=<seconds>]-
表æå®¢æ·ç«¯æ¿ææ¥æ¶ä¸ä¸ªå·²ç»è¿æçèµæºãå¯ä»¥è®¾ç½®ä¸ä¸ªå¯éçç§æ°ï¼è¡¨ç¤ºååºä¸è½å·²ç»è¿æ¶è¶ è¿è¯¥ç»å®çæ¶é´ã
min-fresh=<seconds>-
表示客æ·ç«¯å¸æè·åä¸ä¸ªè½å¨æå®çç§æ°å ä¿æå ¶ææ°ç¶æçååºã
stale-while-revalidate=<seconds>-
表æå®¢æ·ç«¯æ¿ææ¥åéæ§çååºï¼åæ¶å¨åå°å¼æ¥æ£æ¥æ°çååºãç§å¼æç¤ºå®¢æ·æ¿ææ¥åéæ§ååºçæ¶é´é¿åº¦ã
stale-if-error=<seconds>-
è¡¨ç¤ºå¦ææ°çæ£æ¥å¤±è´¥ï¼åå®¢æ·æ¿ææ¥åéæ§çååºãç§æ°å¼è¡¨ç¤ºå®¢æ·å¨åå§å°æåæ¿ææ¥åéæ§ååºçæ¶é´ã
éæ°éªè¯åéæ°å è½½
must-revalidate-
䏿¦èµæºè¿æï¼æ¯å¦å·²ç»è¶ è¿
max-ageï¼ï¼å¨æåååå§æå¡å¨éªè¯ä¹åï¼ç¼åä¸è½ç¨è¯¥èµæºååºåç»è¯·æ±ã proxy-revalidate-
ä¸ must-revalidate ä½ç¨ç¸åï¼ä½å®ä» éç¨äºå ±äº«ç¼åï¼ä¾å¦ä»£çï¼ï¼å¹¶è¢«ç§æç¼å忽ç¥ã
immutable-
表示ååºæ£æä¸ä¼éæ¶é´èæ¹åãèµæºï¼å¦ææªè¿æï¼å¨æå¡å¨ä¸ä¸åçæ¹åï¼å æ¤å®¢æ·ç«¯ä¸åºåééæ°éªè¯è¯·æ±å¤´ï¼ä¾å¦
If-None-Matchæ If-Modified-Sinceï¼æ¥æ£æ¥æ´æ°ï¼å³ä½¿ç¨æ·æ¾å¼å°å·æ°é¡µé¢ãå¨ Firefox ä¸ï¼immutable åªè½è¢«ç¨å¨https://transactions. æå ³æ´å¤ä¿¡æ¯ï¼è¯·åé è¿éã
å ¶ä»
no-transform-
ä¸å¾å¯¹èµæºè¿è¡è½¬æ¢æè½¬åã
Content-EncodingãContent-RangeãContent-Typeç HTTP 头ä¸è½ç±ä»£çä¿®æ¹ãä¾å¦ï¼ééæä»£çæè å¦Google's Light Modeå¯è½å¯¹å¾åæ ¼å¼è¿è¡è½¬æ¢ï¼ä»¥ä¾¿èçç¼åç©ºé´æè åå°ç¼æ ¢é¾è·¯ä¸çæµéãno-transformæä»¤ä¸å è®¸è¿æ ·åã only-if-cached-
表æå®¢æ·ç«¯åªæ¥åå·²ç¼åçååºï¼å¹¶ä¸ä¸è¦ååå§æå¡å¨æ£æ¥æ¯å¦ææ´æ°çæ·è´ã
示ä¾
>ç¦æ¢ç¼å
åéå¦ä¸ååºå¤´å¯ä»¥å
³éç¼åãæ¤å¤ï¼å¯ä»¥åèExpiresåPragmaæ¶æ¯å¤´ã
Cache-Control: no-store
ç¼åéæèµæº
对äºåºç¨ç¨åºä¸ä¸ä¼æ¹åçæä»¶ï¼ä½ é常å¯ä»¥å¨åéååºå¤´åæ·»å 积æç¼åãè¿å æ¬ä¾å¦ç±åºç¨ç¨åºæä¾çéææä»¶ï¼ä¾å¦å¾åï¼CSS æä»¶å JavaScript æä»¶ãå¦è¯·åé Expires æ é¢ã
Cache-Control:public, max-age=31536000
éè¦éæ°éªè¯
æå® no-cache æ max-age=0, must-revalidate 表示客æ·ç«¯å¯ä»¥ç¼åèµæºï¼æ¯æ¬¡ä½¿ç¨ç¼åèµæºåé½å¿
须鿰éªè¯å
¶æææ§ãè¿æå³çæ¯æ¬¡é½ä¼åèµ· HTTP 请æ±ï¼ä½å½ç¼åå
å®¹ä»æææ¶å¯ä»¥è·³è¿ HTTP ååºä½çä¸è½½ã
Cache-Control: no-cache
Cache-Control: max-age=0, must-revalidate
注æ: 妿æå¡å¨å ³éæå¤±å»è¿æ¥ï¼ä¸é¢çæä»¤å¯è½ä¼é æä½¿ç¨ç¼åã
Cache-Control: max-age=0
è§è
| è§è |
|---|
| HTTP Caching > # field.cache-control > |
| HTTP Immutable Responses > # the-immutable-cache-control-extension > |