åè¨
Http ç¼åæºå¶ä½ä¸º web æ§è½ä¼åçéè¦æ段ï¼å¯¹äºä»äº Web å¼åçåå¦ä»¬æ¥è¯´ï¼åºè¯¥æ¯ç¥è¯ä½ç³»åºä¸çä¸ä¸ªåºç¡ç¯èï¼åæ¶å¯¹äºæå¿æ为å端æ¶æå¸çåå¦æ¥è¯´æ¯å¿ å¤çç¥è¯æè½ã
ä½æ¯å¯¹äºå¾å¤å端åå¦æ¥è¯´ï¼ä» ä» åªæ¯ç¥éæµè§å¨ä¼å¯¹è¯·æ±çéææ件è¿è¡ç¼åï¼ä½æ¯ä¸ºä»ä¹è¢«ç¼åï¼ç¼åæ¯ææ ·çæçï¼å´å¹¶ä¸æ¯å¾æ¸ æ¥ã
å¨æ¤ï¼æä¼å°è¯ç¨ç®åæäºçæåï¼å大家系ç»çä»ç»HTTPç¼åæºå¶ï¼ææ对åä½æ£ç¡®çç解å端ç¼åææ帮å©ã
å¨ä»ç»HTTPç¼åä¹åï¼ä½ä¸ºç¥è¯éºå«ï¼å ç®åä»ç»ä¸ä¸HTTPæ¥æ
HTTPæ¥æå°±æ¯æµè§å¨åæå¡å¨é´éä¿¡æ¶åéåååºçæ°æ®åã
æµè§å¨åæå¡å¨è¯·æ±æ°æ®ï¼åé请æ±(request)æ¥æï¼æå¡å¨åæµè§å¨è¿åæ°æ®ï¼è¿åååº(response)æ¥æã
æ¥æä¿¡æ¯ä¸»è¦å为两é¨å
1.å å«å±æ§çé¦é¨(header)âââââââââéå ä¿¡æ¯ï¼cookieï¼ç¼åä¿¡æ¯çï¼ä¸ç¼åç¸å ³çè§åä¿¡æ¯ï¼åå å«å¨headerä¸
2.å å«æ°æ®ç主ä½é¨å(body)ââââââââHTTP请æ±çæ£æ³è¦ä¼ è¾çé¨å
ç¼åè§å解æ
为æ¹ä¾¿å¤§å®¶ç解ï¼æ们认为æµè§å¨åå¨ä¸ä¸ªç¼åæ°æ®åº,ç¨äºåå¨ç¼åä¿¡æ¯ã
å¨å®¢æ·ç«¯ç¬¬ä¸æ¬¡è¯·æ±æ°æ®æ¶ï¼æ¤æ¶ç¼åæ°æ®åºä¸æ²¡æ对åºçç¼åæ°æ®ï¼éè¦è¯·æ±æå¡å¨ï¼æå¡å¨è¿ååï¼å°æ°æ®åå¨è³ç¼åæ°æ®åºä¸ã
HTTPç¼åæå¤ç§è§åï¼æ ¹æ®æ¯å¦éè¦éæ°åæå¡å¨å起请æ±æ¥åç±»ï¼æå°å ¶å为两大类(强å¶ç¼åï¼å¯¹æ¯ç¼å)
å¨è¯¦ç»ä»ç»è¿ä¸¤ç§è§åä¹åï¼å éè¿æ¶åºå¾çæ¹å¼ï¼è®©å¤§å®¶å¯¹è¿ä¸¤ç§è§åæ个ç®åäºè§£ã
å·²åå¨ç¼åæ°æ®æ¶ï¼ä» åºäºå¼ºå¶ç¼åï¼è¯·æ±æ°æ®çæµç¨å¦ä¸
å·²åå¨ç¼åæ°æ®æ¶ï¼ä» åºäºå¯¹æ¯ç¼åï¼è¯·æ±æ°æ®çæµç¨å¦ä¸
对ç¼åæºå¶ä¸å¤ªäºè§£çåå¦å¯è½ä¼é®ï¼åºäºå¯¹æ¯ç¼åçæµç¨ä¸ï¼ä¸ç®¡æ¯å¦ä½¿ç¨ç¼åï¼é½éè¦åæå¡å¨åé请æ±ï¼é£ä¹è¿ç¨ç¼åå¹²ä»ä¹ï¼
è¿ä¸ªé®é¢ï¼æ们æä¸æ¾ä¸ï¼åæå¨è¯¦ç»ä»ç»æ¯ç§ç¼åè§åçæ¶åï¼ä¼å¸¦ç»å¤§å®¶çæ¡ã
æ们å¯ä»¥çå°ä¸¤ç±»ç¼åè§åçä¸åï¼å¼ºå¶ç¼åå¦æçæï¼ä¸éè¦ååæå¡å¨åç交äºï¼è对æ¯ç¼åä¸ç®¡æ¯å¦çæï¼é½éè¦ä¸æå¡ç«¯åç交äºã
两类ç¼åè§åå¯ä»¥åæ¶åå¨ï¼å¼ºå¶ç¼åä¼å 级é«äºå¯¹æ¯ç¼åï¼ä¹å°±æ¯è¯´ï¼å½æ§è¡å¼ºå¶ç¼åçè§åæ¶ï¼å¦æç¼åçæï¼ç´æ¥ä½¿ç¨ç¼åï¼ä¸åæ§è¡å¯¹æ¯ç¼åè§åã
强å¶ç¼å
ä»ä¸ææ们å¾ç¥ï¼å¼ºå¶ç¼åï¼å¨ç¼åæ°æ®æªå¤±æçæ åµä¸ï¼å¯ä»¥ç´æ¥ä½¿ç¨ç¼åæ°æ®ï¼é£ä¹æµè§å¨æ¯å¦ä½å¤æç¼åæ°æ®æ¯å¦å¤±æå¢ï¼
æ们ç¥éï¼å¨æ²¡æç¼åæ°æ®çæ¶åï¼æµè§å¨åæå¡å¨è¯·æ±æ°æ®æ¶ï¼æå¡å¨ä¼å°æ°æ®åç¼åè§åä¸å¹¶è¿åï¼ç¼åè§åä¿¡æ¯å å«å¨ååºheaderä¸ã
对äºå¼ºå¶ç¼åæ¥è¯´ï¼ååºheaderä¸ä¼æ两个å段æ¥æ æ失æè§åï¼
Expires/Cache-Control
ï¼
使ç¨chromeçå¼åè å·¥å ·ï¼å¯ä»¥å¾ææ¾ççå°å¯¹äºå¼ºå¶ç¼åçææ¶ï¼ç½ç»è¯·æ±çæ åµ
Expires
Expiresçå¼ä¸ºæå¡ç«¯è¿åçå°ææ¶é´ï¼å³ä¸ä¸æ¬¡è¯·æ±æ¶ï¼è¯·æ±æ¶é´å°äºæå¡ç«¯è¿åçå°ææ¶é´ï¼ç´æ¥ä½¿ç¨ç¼åæ°æ®ã
ä¸è¿Expires æ¯HTTP 1.0çä¸è¥¿ï¼ç°å¨é»è®¤æµè§å¨åé»è®¤ä½¿ç¨HTTP 1.1ï¼æ以å®çä½ç¨åºæ¬å¿½ç¥ã
å¦ä¸ä¸ªé®é¢æ¯ï¼å°ææ¶é´æ¯ç±æå¡ç«¯çæçï¼ä½æ¯å®¢æ·ç«¯æ¶é´å¯è½è·æå¡ç«¯æ¶é´æ误差ï¼è¿å°±ä¼å¯¼è´ç¼åå½ä¸ç误差ã
æ以HTTP 1.1 ççæ¬ï¼ä½¿ç¨Cache-Controlæ¿ä»£ã
Cache-Control
Cache-Control æ¯æéè¦çè§åã常è§çåå¼æprivateãpublicãno-cacheãmax-ageï¼no-storeï¼é»è®¤ä¸ºprivateã
- private: 客æ·ç«¯å¯ä»¥ç¼å
- public: 客æ·ç«¯å代çæå¡å¨é½å¯ç¼åï¼å端çåå¦ï¼å¯ä»¥è®¤ä¸ºpublicåprivateæ¯ä¸æ ·çï¼
- max-age=xxx: ç¼åçå 容å°å¨ xxx ç§å失æ
- no-cache: éè¦ä½¿ç¨å¯¹æ¯ç¼åæ¥éªè¯ç¼åæ°æ®ï¼åé¢ä»ç»ï¼
- no-store: ææå 容é½ä¸ä¼ç¼åï¼å¼ºå¶ç¼åï¼å¯¹æ¯ç¼åé½ä¸ä¼è§¦åï¼å¯¹äºå端å¼åæ¥è¯´ï¼ç¼åè¶å¤è¶å¥½ï¼soâ¦åºæ¬ä¸åå®è¯´886ï¼
举个ä¾å
å¾ä¸Cache-Controlä» æå®äºmax-ageï¼æ以é»è®¤ä¸ºprivateï¼ç¼åæ¶é´ä¸º31536000ç§ï¼365天ï¼
ä¹å°±æ¯è¯´ï¼å¨365天å å次请æ±è¿æ¡æ°æ®ï¼é½ä¼ç´æ¥è·åç¼åæ°æ®åºä¸çæ°æ®ï¼ç´æ¥ä½¿ç¨ã
对æ¯ç¼å
对æ¯ç¼åï¼é¡¾åæä¹ï¼éè¦è¿è¡æ¯è¾å¤ææ¯å¦å¯ä»¥ä½¿ç¨ç¼åã
æµè§å¨ç¬¬ä¸æ¬¡è¯·æ±æ°æ®æ¶ï¼æå¡å¨ä¼å°ç¼åæ è¯ä¸æ°æ®ä¸èµ·è¿åç»å®¢æ·ç«¯ï¼å®¢æ·ç«¯å°äºè å¤ä»½è³ç¼åæ°æ®åºä¸ã
å次请æ±æ°æ®æ¶ï¼å®¢æ·ç«¯å°å¤ä»½çç¼åæ è¯åéç»æå¡å¨ï¼æå¡å¨æ ¹æ®ç¼åæ è¯è¿è¡å¤æï¼å¤ææååï¼è¿å304ç¶æç ï¼éç¥å®¢æ·ç«¯æ¯è¾æåï¼å¯ä»¥ä½¿ç¨ç¼åæ°æ®ã
第ä¸æ¬¡è®¿é®ï¼
å次访é®ï¼
éè¿ä¸¤å¾ç对æ¯ï¼æ们å¯ä»¥å¾æ¸ æ¥çåç°ï¼å¨å¯¹æ¯ç¼åçææ¶ï¼ç¶æç 为304ï¼å¹¶ä¸æ¥æ大å°å请æ±æ¶é´å¤§å¤§åå°ã
åå æ¯ï¼æå¡ç«¯å¨è¿è¡æ è¯æ¯è¾åï¼åªè¿åheaderé¨åï¼éè¿ç¶æç éç¥å®¢æ·ç«¯ä½¿ç¨ç¼åï¼ä¸åéè¦å°æ¥æ主ä½é¨åè¿åç»å®¢æ·ç«¯ã
对äºå¯¹æ¯ç¼åæ¥è¯´ï¼ç¼åæ è¯çä¼ éæ¯æ们çééè¦ç解çï¼å®å¨è¯·æ±headeråååºheaderé´è¿è¡ä¼ éï¼
ä¸å ±å为两ç§æ è¯ä¼ éï¼æ¥ä¸æ¥ï¼æ们åå¼ä»ç»ã
Last-Modified / If-Modified-Since
Last-Modifiedï¼æå¡å¨å¨ååºè¯·æ±æ¶ï¼åè¯æµè§å¨èµæºçæåä¿®æ¹æ¶é´ã
If-Modified-Sinceï¼
å次请æ±æå¡å¨æ¶ï¼éè¿æ¤å段éç¥æå¡å¨ä¸æ¬¡è¯·æ±æ¶ï¼æå¡å¨è¿åçèµæºæåä¿®æ¹æ¶é´ã
æå¡å¨æ¶å°è¯·æ±ååç°æ头If-Modified-Since åä¸è¢«è¯·æ±èµæºçæåä¿®æ¹æ¶é´è¿è¡æ¯å¯¹ã
è¥èµæºçæåä¿®æ¹æ¶é´å¤§äºIf-Modified-Sinceï¼è¯´æèµæºå被æ¹å¨è¿ï¼åååºæ´çèµæºå 容ï¼è¿åç¶æç 200ï¼
è¥èµæºçæåä¿®æ¹æ¶é´å°äºæçäºIf-Modified-Sinceï¼è¯´æèµæºæ æ°ä¿®æ¹ï¼åååºHTTP 304ï¼åç¥æµè§å¨ç»§ç»ä½¿ç¨æä¿åçcacheã
Etag / If-None-Matchï¼ä¼å 级é«äºLast-Modified / If-Modified-Sinceï¼
Etagï¼
æå¡å¨ååºè¯·æ±æ¶ï¼åè¯æµè§å¨å½åèµæºå¨æå¡å¨çå¯ä¸æ è¯ï¼çæè§åç±æå¡å¨å³å®ï¼ã
If-None-Matchï¼
å次请æ±æå¡å¨æ¶ï¼éè¿æ¤å段éç¥æå¡å¨å®¢æ·æ®µç¼åæ°æ®çå¯ä¸æ è¯ã
æå¡å¨æ¶å°è¯·æ±ååç°æ头If-None-Match åä¸è¢«è¯·æ±èµæºçå¯ä¸æ è¯è¿è¡æ¯å¯¹ï¼
ä¸åï¼è¯´æèµæºå被æ¹å¨è¿ï¼åååºæ´çèµæºå 容ï¼è¿åç¶æç 200ï¼
ç¸åï¼è¯´æèµæºæ æ°ä¿®æ¹ï¼åååºHTTP 304ï¼åç¥æµè§å¨ç»§ç»ä½¿ç¨æä¿åçcacheã
æ»ç»
对äºå¼ºå¶ç¼åï¼æå¡å¨éç¥æµè§å¨ä¸ä¸ªç¼åæ¶é´ï¼å¨ç¼åæ¶é´å ï¼ä¸æ¬¡è¯·æ±ï¼ç´æ¥ç¨ç¼åï¼ä¸å¨æ¶é´å ï¼æ§è¡æ¯è¾ç¼åçç¥ã
对äºæ¯è¾ç¼åï¼å°ç¼åä¿¡æ¯ä¸çEtagåLast-Modifiedéè¿è¯·æ±åéç»æå¡å¨ï¼ç±æå¡å¨æ ¡éªï¼è¿å304ç¶æç æ¶ï¼æµè§å¨ç´æ¥ä½¿ç¨ç¼åã
æµè§å¨ç¬¬ä¸æ¬¡è¯·æ±ï¼
æµè§å¨å次请æ±æ¶ï¼
æä¸å¦æåºç°é误ï¼å¸æå°ä¼ä¼´ä»¬å¯ä»¥è° 解ï¼æ´å¸æå¯ä»¥ç»äºææ£
HTTPç¼åç¸å ³çæ¦å¿µ http请æ±å¤´ä¿¡æ¯ httpååºå¤´ä¿¡æ¯
请æ±å¤´ï¼æµè§å¨åæå¡å¨åé请æ±çæ°æ®ï¼èµæºã
ååºå¤´ï¼æå¡å¨åæµè§å¨ååºæ°æ®ï¼åè¯æµè§å¨ææ¯è°ï¼æè¦ä½ æä¹åãå¦ï¼ææ¯nginxï¼ç»ä½ çèµæºæ¯æ£ç¡®ç200 è¿æ¯é误ç404ï¼æè¦ä½ ç¼åå¤ä¹ ã
常è§ç请æ±å¤´ï¼
Accept: text/html,image/* æµè§å¨å¯ä»¥æ¥æ¶çç±»å
Accept-Charset: ISO-- æµè§å¨å¯ä»¥æ¥æ¶çç¼ç ç±»å
Accept-Encoding: gzip,compress æµè§å¨å¯ä»¥æ¥æ¶å缩ç¼ç ç±»å
Accept-Language: en-us,zh-cn æµè§å¨å¯ä»¥æ¥æ¶çè¯è¨åå½å®¶ç±»å
Host: www.lks.cn: æµè§å¨è¯·æ±ç主æºå端å£
If-Modified-Since: Tue, Jul :: GMT æ个页é¢ç¼åæ¶é´
Referer: http://www.lks.cn/index.html 请æ±æ¥èªäºåªä¸ªé¡µé¢
User-Agent: Mozilla/ compatible; MSIE ; Windows NT æµè§å¨ç¸å
³ä¿¡æ¯
Cookieï¼ æµè§å¨æåæå¡å¨åéçä¿¡æ¯
Connection: close1/Keep-Alive1 HTTP请æ±ççæ¬çç¹ç¹
Date: Tue, Jul ::GMT 请æ±ç½ç«çæ¶é´
Allow:GET 请æ±çæ¹æ³ GET 常è§çè¿æPOST
Keep-Aliveï¼ è¿æ¥çæ¶é´ï¼
Connectionï¼keep-alive æ¯å¦æ¯é¿è¿æ¥
Cache-Controlï¼max-age= ç¼åçæé¿æ¶é´ s
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
常è§çååºå¤´ï¼
Location: http://www.lks.cn/index.html æ§å¶æµè§å¨æ¾ç¤ºåªä¸ªé¡µé¢
Server:apache nginx æå¡å¨çç±»å
Content-Encoding: gzip æå¡å¨åéçå缩ç¼ç æ¹å¼
Content-Length: æå¡å¨åéæ¾ç¤ºçåèç é¿åº¦
Content-Language: zh-cn æå¡å¨åéå
容çè¯è¨åå½å®¶å
Content-Type: image/jpeg; charset=UTF- æå¡å¨åéå
容çç±»ååç¼ç ç±»å
Last-Modified: Tue, Jul ::GMT æå¡å¨æåä¸æ¬¡ä¿®æ¹çæ¶é´
Refresh: ;url=http://www.lks.cn æ§å¶æµè§å¨1ç§éå转åURLææåç页é¢
Content-Disposition: attachment; filename=lks.jpg æå¡å¨æ§å¶æµè§å¨åä¸è½½æ¹å¼æå¼æ件
Transfer-Encoding: chunked æå¡å¨ååä¼ éæ°æ®å°å®¢æ·ç«¯
Set-Cookie:SS=Q0=Lb_nQ; path=/search æå¡å¨åéCookieç¸å
³çä¿¡æ¯
Expires: - èµæºçè¿ææ¶é´ï¼æä¾ç»æµè§å¨ç¼åæ°æ®,-æ°¸è¿è¿æ
Cache-Control: no-cache åè¯æµè§å¨ï¼ä¸å®è¦åæå¡å¨æ ¡éªï¼ä¸ç®¡æ没æç¼åæ°æ®ã
Pragma: no-cache æå¡å¨æ§å¶æµè§å¨ä¸è¦ç¼åç½é¡µ
Connection: close/Keep-AliveHTTP 请æ±ççæ¬çç¹ç¹
Date: Tue, Jul :: GMT ååºç½ç«çæ¶é´
ETagï¼âihfdgkdgnp98hdfgâ èµæºå®ä½çæ è¯(å¯ä¸æ è¯ï¼ç±»ä¼¼md5å¼ï¼æ件æä¿®æ¹md5å°±ä¸ä¸æ ·)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
å ³äºç¼åç¸å ³å¤´ç解éï¼
Expires
ä¸ä¸ªGMTæ¶é´,è¯å¾åç¥æµè§å¨,å¨æ¤æ¥æå ,å¯ä»¥ä¿¡ä»»å¹¶ä½¿ç¨å¯¹åºç¼åä¸çå¯æ¬,缺ç¹æ¯,ä¸ä½å®¢æ·ç«¯æ¥æä¸åç¡®.åå¯è½å¯¼è´å¤±æ.
Pragma : no-cache
è¿ä¸ªæ¯http1.0ä¸ç常è§å¤´ï¼ä½ç¨åhttp1.1ç Cache-Control : no-cache
Last-Modified
ä¸ä¸ªGMTæ¶é´,åç¥è¢«è¯·æ±å®ä½çæåä¿®æ¹æ¶é´.ç¨äºæµè§å¨æ ¡éªå ¶ç¼åå¯æ¬æ¯å¦ä»ç¶å¯ä»¥ä¿¡ä»».ä¸å ¶ç¸å ³ç两个æ¡ä»¶è¯·æ±æ 头ï¼
-
If-Modified-Since
ä» å¨getæ¹æ³ä¸æä¹ï¼è¿ä¸ªä¹æ¯æ¯è¾å¸¸è§çã å¦æå®ä½å¨æå®æ¶é´å,没æä¿®æ¹åè¿åä¸ä¸ª304,å¦åè¿åä¸ä¸ªå¸¸è§çGet请æ±çååº(æ¯å¦200)ï¼éææ件没æä¿®æ¹è¿å304æ¯å¥½çï¼å 为å®åªæ¯åæå¡å¨æ ¡éªä¸ä¸æ¯å¦æä¿®æ¹ï¼è并没æå200é£æ ·éæ°è¯·æ±æ°æ®ã
-
If-Unmodified-Since:
å¦æå®ä½æ²¡æä»»ä½ä¿®æ¹,é£ä¹å°±å¯ä»¥ç´æ¥æ§è¡è¯¥è¯·æ±ï¼ èå¦ææä¿®æ¹,åè¿åä¸ä¸ª412 Precondition Failedç¶æç ,并ä¸æå¼è¯¥æ¹æ³å¯¹åºçè¡ä¸ºæä½(GETæ¹æ³é¤å¤).
Cache-Control (http1.1ç常è§å¤´)
-
public
ä» ä½ç°å¨ååºå¤´ï¼éç¥æµè§å¨å¯ä»¥æ æ¡ä»¶çç¼å该ååºã
-
private
ä» ä½ç°å¨ååºå¤´ï¼éç¥æµè§å¨åªé对å个ç¨æ·ç¼åååº. ä¸å¯ä»¥å ·ä½æå®æ个å段.å¦private ââusernameâ
-
no-cache
a) 请æ±å¤´ä¸ï¼åè¯æµè§å¨åå»æå¡å¨åæ°æ®ï¼å¹¶éªè¯ä½ çç¼å(å¦ææçè¯)ã
b) ååºå¤´ä¸ï¼åè¯æµè§å¨ï¼ä¸å®è¦åæå¡å¨æ ¡éªï¼ä¸ç®¡æ没æç¼åæ°æ®ã å¦æç¡®å®æ²¡æ被æ¹ï¼å¯ä»¥ä½¿ç¨ç¼åä¸çæ°æ®
-
no-store
åè¯æµè§å¨ä»»ä½æ åµä¸é½ä¸è¦è¢«ç¼åã
-
max-age
a) 请æ±å¤´ä¸ï¼å¼ºå¶ååºæµè§å¨ï¼æ ¹æ®è¯¥å¼,æ ¡éªç¼å.å³ä¸èªèº«çAgeå¼,ä¸è¯·æ±æ¶é´åæ¯è¾.å¦æè¶ åºmax- ageå¼,å强å¶å»æå¡å¨ç«¯éªè¯.以确ä¿è¿åä¸ä¸ªæ°é²çååº.å ¶åè½æ¬è´¨ä¸ä¸ä¼ ç»çExpires类似,ä½åºå«å¨äºEx
piresæ¯æ ¹æ®æ个ç¹å®æ¥æå¼åæ¯è¾.ä¸ä½ç¼åè èªèº«çæ¶é´ä¸åç¡®.åç»æå¯è½å°±æ¯é误ç.èmax-age,æ¾ç¶æ æ¤é®é¢.
Max-ageçä¼å 级ä¹æ¯é«äºExpiresç.
b) ååºå¤´ä¸ï¼åä¸
<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/markdown_views-ea0013b516.css" target="_blank" rel="external nofollow" >
</div>