blog
blog copied to clipboard
HTTP 实体和编码
æ¯å¤ŠéŊææ°äģĨäēŋ莥įåį§åĒäŊå¯ščąĄįģįą HTTP äŧ éīŧåĻåžåãææŦãåŊąįäģĨåčŊ¯äģļį¨åēįãHTTP čĻįĄŽäŋåŽææŋčŊŊįâč´§įŠâæģĄ čļŗäģĨä¸æĄäģļ:
- å¯äģĨčĸĢæŖįĄŽå°č¯åĢ(éčŋContent-TypeéĻé¨č¯´æåĒäŊæ ŧåŧīŧContent- Language éĻé¨č¯´æč¯č¨)īŧäģĨäžŋæĩč§å¨åå ļäģåŽĸæˇįĢ¯čŊæŖįĄŽå¤įå 厚ã
- å¯äģĨčĸĢæŖįĄŽå°č§Ŗå (éčŋContent-LengthéĻé¨åContent-EncodingéĻé¨)ã
- æ¯ææ°į(éčŋåŽäŊéĒč¯į åįŧåčŋææ§åļ)
- įŦĻåį¨æˇįéčĻ(åēäēAcceptįŗģåįå 厚ååéĻé¨)
- å¨įŊįģä¸å¯äģĨåŋĢéææå°äŧ čž(éčŋčå´č¯ˇæąãåˇŽåŧįŧį äģĨåå ļäģæ°æŽåįŧŠæšæŗ)
- åŽæ´å°čžžãæĒčĸĢį¯Ąæš(éčŋäŧ čžįŧį éĻé¨åContent-MD5æ ĄéĒåéĻé¨)
HTTP åŽäŊéĻé¨
HTTP åŽäŊéĻé¨æčŋ°äē HTTP æĨæįå 厚ãHTTP/1.1 įåŽäšäēäģĨä¸ 10 ä¸ĒåēæŦåäŊéĻé¨åæŽĩã
- Content-TypeīŧåŽäŊä¸ææŋčŊŊå¯ščąĄįįąģåã
- Content-Lengthīŧ æäŧ éåŽäŊä¸ģäŊįéŋåēĻæ大å°ã
- Content-Languageīŧ ä¸æäŧ éå¯ščąĄæį¸é įäēēįąģč¯č¨ã
- Content-Encodingīŧ å¯ščąĄæ°æŽæåįäģģæåæĸ(æ¯åĻīŧåįŧŠ)ã
- Content-Locationīŧ ä¸ä¸Ēå¤į¨äŊįŊŽīŧč¯ˇæąæļå¯éčŋåŽčˇåžå¯ščąĄã
- Content-Rangeīŧ åĻæčŋæ¯é¨ååŽäŊīŧčŋä¸ĒéĻé¨č¯´æåŽæ¯æ´äŊįåĒä¸Ēé¨åã
- Content-MD5īŧ åŽäŊä¸ģäŊå 厚įæ ĄéĒåã
- Last-Modifiedīŧ æäŧ čžå 厚å¨æåĄå¨ä¸ååģēææåäŋŽæšįæĨææļé´ã
- Expiresīŧ åŽäŊæ°æŽå°čĻå¤ąæįæĨææļé´ã
- Allowīŧ č¯Ĩčĩæēæå 莸įåį§č¯ˇæąæšæŗīŧäžåĻīŧGET å HEADã
- ETagīŧ čŋäģŊææĄŖįšåŽåŽäžįå¯ä¸éĒč¯į ãETag éĻé¨æ˛ĄææŖåŧåŽäšä¸ēåŽäŊéĻé¨īŧäŊåŽå¯ščŽ¸å¤æļååŽäŊįæäŊæĨč¯´īŧéŊæ¯ä¸ä¸ĒéčĻįéĻé¨ã
- Cache-Controlīŧ æåēåēč¯ĨåĻäŊįŧåč¯ĨææĄŖãå ETag éĻé¨įąģäŧŧīŧCache-Control éĻé¨äšæ˛ĄææŖ åŧåŽäšä¸ēåŽäŊéĻé¨ã
åŽäŊį大å°īŧContent-Lengthīŧ
é¤éäŊŋį¨äēååįŧį īŧåĻå Content-Length éĻé¨å°ąæ¯å¸ĻæåŽäŊä¸ģäŊįæĨæåŋ éĄģäŊŋį¨įãäŊŋį¨ Content-Length éĻé¨æ¯ä¸ēäēčŊå¤æŖæĩåēæåĄå¨å´Šæēčå¯ŧč´įæĨææĒå°žīŧåšļå¯šå ąäēĢæäš čŋæĨįå¤ä¸ĒæĨæčŋčĄæŖįĄŽåæŽĩã
Content-Length éĻé¨æį¤ēåēæĨæä¸åŽäŊä¸ģäŊįåč大å°ãčŋä¸Ē大å°æ¯å
åĢäēææå
厚įŧį įãåĻæä¸ģäŊčŋčĄäēå
厚įŧį īŧContent-Length éĻé¨č¯´æįå°ąæ¯ įŧį å(encoded)
įä¸ģäŊįåčéŋåēĻīŧčä¸æ¯æĒįŧį įåå§ä¸ģäŊįéŋåēĻã
æ˛Ąæ Content-Length įč¯īŧåŽĸæˇįĢ¯æ æŗåēåå°åēæ¯æĨæįģææļæŖ常įčŋæĨå
ŗéīŧčŋæ¯æĨæäŧ čžä¸įąäēæåĄå¨å´Šæēčå¯ŧč´įčŋæĨå
ŗéãåŽĸæˇįĢ¯éčĻéčŋ Content-Length æĨæŖæĩ æĨææĒå°ž
ã
Content-Length éĻé¨å¯šäēæäš čŋæĨæ¯åŋ ä¸å¯å°įãåĻæååēéčŋæäš čŋæĨäŧ éīŧ å°ąå¯čŊæåĻä¸æĄ HTTP ååēį´§éå ļåãåŽĸæˇįĢ¯éčŋ Content-Length éĻé¨å°ąå¯äģĨįĨéæĨæå¨äŊå¤įģæīŧä¸ä¸æĄæĨæäģäŊå¤åŧå§ãå ä¸ēčŋæĨæ¯æäš įīŧåŽĸæˇįĢ¯æ æŗäžčĩ čŋæĨå ŗéæĨå¤åĢæĨæįįģæã
æä¸į§æ åĩä¸īŧäŊŋį¨æäš čŋæĨæļå¯äģĨæ˛Ąæ Content-Length éĻé¨īŧåŗéį¨
ååįŧį (chunked encoding)
æļãå¨ååįŧį įæ åĩä¸īŧæ°æŽæ¯åä¸ēä¸įŗģåįåæĨåéįīŧæ¯åéŊæ大å°č¯´æãåĒææåĄå¨å¨įæéĻé¨įæļåä¸įĨéæ´ä¸ĒåŽäŊį大å°(é常æ¯å ä¸ēåŽäŊæ¯å¨æįæį)īŧäģįļå¯äģĨäŊŋį¨ååįŧį äŧ čžčĨåš˛åˇ˛įĨ大å°įåã
åŽäŊæčĻīŧContent-MD5īŧ
æåĄå¨äŊŋį¨ Content-MD5 éĻé¨åé寚åŽäŊä¸ģäŊčŋčĄ MD5 įŽæŗįįģæãåĒæäē§įååēįåå§æåĄå¨å¯äģĨ莥įŽåšļåé Content-MD5 éĻé¨ãåĻæä¸äģŊææĄŖäŊŋį¨ gzip įŽæŗčŋ čĄåįŧŠīŧįļåį¨ååįŧį åéīŧéŖäšå°ąå¯šæ´ä¸Ēįģ gzip åįŧŠįä¸ģäŊčŋčĄ MD5 莥įŽã
åĒäŊįąģåīŧMIME TypeīŧååįŦĻé
Content-Type éĻé¨åæŽĩč¯´æäēåŽäŊä¸ģäŊį MIME įąģåã6MIME įąģåæ¯æ ååį ååīŧį¨äģĨč¯´æäŊä¸ēč´§įŠčŋčŊŊåŽäŊįåēæŦåĒäŊįąģå(æ¯åĻīŧHTML æäģļãMicrosoft Word ææĄŖææ¯ MPEG č§éĸį)ãåŽĸæˇįĢ¯åēį¨į¨åēäŊŋį¨ MIME įąģåæĨč§Ŗéåå¤įå ļå 厚ã
Content-Type éĻé¨č¯´æįæ¯åå§åŽäŊä¸ģäŊįåĒäŊįąģåãäžåĻīŧ åĻæåŽäŊįģčŋå 厚įŧį įč¯īŧContent-Type éĻé¨č¯´æįäģæ¯įŧį äšåįåŽäŊä¸ģäŊįįąģåã
Content-Type éĻé¨čŋæ¯æå¯éįåæ°æĨčŋä¸æĨč¯´æå 厚įįąģåãcharset(åįŦĻé)åæ°å°ąæ¯ä¸ĒäžåīŧåŽč¯´ææåŽäŊä¸įæ¯įščŊŦæĸä¸ēææŦæäģļä¸įåįŦĻįæšæŗ:
Content-Type: text/html; charset=iso-8859-4
MIME ä¸į multipart(å¤é¨å)įĩåéŽäģļæĨæä¸å åĢå¤ä¸ĒæĨæīŧåŽäģŦåå¨ä¸čĩˇäŊ ä¸ēåä¸įå¤ææĨæåéãæ¯ä¸é¨åéŊæ¯įŦįĢįīŧæåčĒįæčŋ°å ļå 厚įé;ä¸åį é¨åäšé´į¨åįåįŦĻ串čŋæĨå¨ä¸čĩˇã
HTTP äšæ¯æå¤é¨åä¸ģäŊãä¸čŋīŧé常åĒį¨å¨ä¸å两į§æ åŊĸäšä¸īŧæäē¤åĄĢååĨŊį襨æ ŧīŧææ¯äŊä¸ēæŋčŊŊčĨåš˛ææĄŖįæŽĩįčå´ååēã
å 厚įŧį īŧContent-Encodingīŧ
å 厚įŧį īŧæ¯å¯šæĨæįä¸ģäŊčŋčĄįå¯éåæĸãå 厚įŧį æ¯åå 厚įå ˇäŊæ ŧåŧįģčį´§å¯į¸å ŗįãäžåĻīŧäŊ å¯čŊäŧį¨ gzip åįŧŠææŦæäģļīŧäŊä¸æ¯ JPEG æ äģļīŧå ä¸ē JPEG čŋįąģä¸čĨŋį¨ gzip åįŧŠįä¸å¤åĨŊã
HTTP åŽäšäēä¸äēæ åįå
厚įŧį įąģåīŧåšļå
莸į¨æŠåąįŧį įåŊĸåŧåĸæˇģæ´å¤įįŧį ã įą äēčįŊåˇį åé
æēæ(IANA)
寚åį§įŧį čŋčĄæ ååīŧåŽįģæ¯ä¸Ēå
厚įŧį įŽæŗåé
äēå¯ä¸įäģŖåˇãContent-Encoding éĻé¨å°ąį¨čŋäēæ ååįäģŖåˇæĨč¯´æįŧį æļäŊŋ į¨įįŽæŗã
- gzipīŧ襨æåŽäŊéį¨ GNU zip įŧį
- compressīŧ襨æåŽäŊéį¨ Unix įæäģļåįŧŠį¨åē
- deflateīŧ襨æåŽäŊæ¯į¨ zlib įæ ŧåŧåįŧŠį
- identityīŧ襨ææ˛Ąæ寚åŽäŊčŋčĄįŧį ãåŊæ˛Ąæ Content-Encoding éĻé¨æļīŧå°ąéģ莤ä¸ēčŋį§æ åĩã
Accept-EncodingéĻé¨
æ¯Ģæ įéŽīŧæäģŦä¸å¸ææåĄå¨į¨åŽĸæˇįĢ¯æ æŗč§Ŗį įæšåŧæĨ寚å 厚čŋčĄįŧį ãä¸ēäēéŋå æåĄå¨äŊŋį¨åŽĸæˇįĢ¯ä¸æ¯æįįŧį æšåŧīŧåŽĸæˇįĢ¯å°ąæčĒåˇąæ¯æįå 厚įŧį æšåŧå襨æžå¨č¯ˇæąį Accept-Encoding éĻé¨éååēåģã
åĻæ HTTP č¯ˇæąä¸æ˛Ąæå åĢ Accept-Encoding éĻé¨īŧæåĄå¨å°ąå¯äģĨå莞åŽĸæˇįĢ¯čŊå¤æĨåäģģäŊįŧį æšåŧ(įäģˇ äēåé Accept-Encoding: *)ã
åŽĸæˇįĢ¯å¯äģĨįģæ¯į§įŧį éå¸Ļ Q(č´¨é)åŧåæ°æĨč¯´æįŧį įäŧå įē§ãQ åŧįčå´äģ0.0 å° 1.0īŧ0.0 č¯´æåŽĸæˇįĢ¯ä¸æŗæĨåæč¯´æįįŧį īŧ1.0 å襨ææå¸æäŊŋį¨įįŧį ã â*â襨į¤ēâäģģäŊå ļäģæšæŗâãåŗåŽå¨ååēä¸åéäģäšå 厚įģåŽĸæˇįĢ¯æ¯ä¸Ēæ´éį¨įčŋį¨īŧčéæŠäŊŋį¨äŊį§å 厚įŧį åæ¯æ¤čŋį¨įä¸é¨åã
compress;q=0.5, gzip;q=1.0 gzip;q=1.0, identity; q=0.5, *;q=0
äŧ čžįŧį īŧTransfer Codingsīŧ
äŧ čžįŧį
äŧ čžįŧį äšæ¯äŊį¨å¨åŽäŊä¸ģäŊä¸įå¯éåæĸīŧäŊäŊŋį¨åŽäģŦæ¯įąäēæļææšéĸįåå īŧåå 厚įæ ŧåŧæ å ŗãäŊŋį¨äŧ čžįŧį æ¯ä¸ēäēæšå æĨæä¸įæ°æŽå¨įŊįģä¸äŧ čžįæšåŧã
Transfer-EncodingéĻé¨
HTTP å莎ä¸åĒåŽäšäēä¸éĸ两ä¸ĒéĻé¨æĨæčŋ°åæ§åļäŧ čžįŧį ã
- Transfer-Encoding åįĨæĨæļæšä¸ēäēå¯é å°äŧ čžæĨæīŧåˇ˛įģ寚å ļčŋčĄäēäŊį§įŧį ã
- TE į¨å¨č¯ˇæąéĻé¨ä¸īŧåįĨæåĄå¨å¯äģĨäŊŋį¨åĒäēäŧ čžįŧį æŠåąã
ä¸éĸįäžåä¸īŧč¯ˇæąäŊŋį¨äē TE éĻé¨æĨåč¯æåĄå¨åŽå¯äģĨæĨåååįŧį (åĻææ¯ HTTP/1.1 åēį¨į¨åēįč¯īŧčŋå°ąæ¯åŋ éĄģį)åšļä¸æŋææĨåéå¨ååįŧį įæĨæįģå°žä¸ įææ:
GET /new_products.html HTTP/1.1
Host: www.joes-hardware.com
User-Agent: Mozilla/4.61 [en] (WinNT; I) TE: trailers, chunked
...
寚åŽįååēä¸å åĢ Transfer-Encoding éĻé¨īŧį¨äēåč¯æĨæļæšåˇ˛įģį¨ååįŧį 寚 æĨæčŋčĄäēäŧ čžįŧį :
HTTP/1.1 200 OK Transfer-Encoding: chunked Server: Apache/3.0
...
å¨čŋä¸Ēčĩˇå§éĻé¨äšåīŧæĨæįįģæå°ąå°åįæšåã
äŧ čžįŧį įåŧéŊæ¯å¤§å°åæ å ŗįãHTTP/1.1 č§åŽå¨ TE éĻé¨å Transfer-Encoding éĻé¨ä¸äŊŋį¨äŧ čžįŧį åŧãææ°į HTTP č§čåĒåŽäšäēä¸į§äŧ čžįŧį īŧå°ąæ¯ååįŧį ã
ååįŧį
ååįŧį ææĨæåå˛ä¸ēčĨåš˛ä¸Ē大å°åˇ˛įĨįåãåäšé´æ¯į´§æ¨įåéįīŧčŋæ ˇå°ąä¸éčĻå¨åéäšåįĨéæ´ä¸ĒæĨæį大å°äēã
čĻæŗ¨æįæ¯īŧååįŧį æ¯ä¸į§äŧ čžįŧį īŧå æ¤æ¯æĨæįåąæ§īŧčä¸æ¯ä¸ģäŊįåąæ§ã
ååä¸æäš čŋæĨ
čĨåŽĸæˇįĢ¯åæåĄå¨äšé´ä¸æ¯æäš čŋæĨīŧåŽĸæˇįĢ¯å°ąä¸éčĻįĨéåŽæŖå¨č¯ģåįä¸ģäŊįéŋåēĻīŧčåĒéčĻč¯ģå°æåĄå¨å ŗéä¸ģäŊčŋæĨä¸ēæĸã
åŊäŊŋį¨æäš čŋæĨæļīŧå¨æåĄå¨åä¸ģäŊäšåīŧåŋ éĄģįĨéåŽį大å°åšļå¨ Content- Length éĻé¨ä¸åéãåĻææåĄå¨å¨æååģēå 厚īŧå°ąå¯čŊå¨åéäšåæ æŗįĨéä¸ģäŊįéŋåēĻã
ååįŧį ä¸ēčŋį§å°éžæäžäēč§ŖåŗæšæĄīŧåĒčĻå 莸æåĄå¨æä¸ģäŊéååéīŧč¯´ææ¯åį大å°å°ąå¯äģĨäēãå ä¸ēä¸ģäŊæ¯å¨æååģēįīŧæåĄå¨å¯äģĨįŧå˛åŽįä¸é¨åīŧåéå ļ大å°åį¸åēįåīŧįļåå¨ä¸ģäŊåéåŽäšåéå¤čŋä¸Ēčŋį¨ãæåĄå¨å¯äģĨį¨å¤§å°ä¸ē 0 įåäŊä¸ēä¸ģäŊįģæįäŋĄåˇīŧčŋæ ˇå°ąå¯äģĨįģ§įģäŋæčŋæĨīŧä¸ēä¸ä¸ä¸Ēååēååå¤ã
åŽĸæˇįĢ¯äšå¯äģĨåéååįæ°æŽįģæåĄå¨ãå ä¸ēåŽĸæˇįĢ¯äēå ä¸įĨéæåĄå¨æ¯åĻæĨåååįŧį (čŋæ¯å ä¸ēæåĄå¨ä¸äŧå¨įģåŽĸæˇįĢ¯įååēä¸åé TE éĻé¨)īŧæäģĨåŽĸæˇįĢ¯åŋ éĄģååĨŊæåĄå¨į¨411 Length Required(éčĻContent-LengthéĻé¨)ååēæĨæįģååč¯ˇæąįåå¤ã
ååæĨæįææ
åĻæåŽĸæˇįĢ¯į TE éĻé¨ä¸č¯´æåŽå¯äģĨæĨåææįč¯īŧå°ąå¯äģĨå¨ååįæĨææåå ä¸ææãäē§įåå§ååēįæåĄå¨äšå¯äģĨå¨ååįæĨææåå ä¸ææãææįå 厚æ¯å¯éįå æ°æŽīŧåŽĸæˇįĢ¯ä¸ä¸åŽéčĻįč§ŖåäŊŋį¨(åŽĸæˇįĢ¯å¯äģĨåŋŊįĨåšļä¸ĸåŧææä¸įå 厚)ã
ææä¸å¯äģĨå åĢéå¸ĻįéĻé¨åæŽĩīŧåŽäģŦįåŧå¨æĨæåŧå§įæļåå¯čŊæ¯æ æŗįĄŽåŽį (äžåĻīŧåŋ éĄģčĻå įæä¸ģäŊįå 厚)ãContent-MD5 éĻé¨å°ąæ¯ä¸ä¸Ēå¯äģĨå¨ææä¸åéįéĻé¨īŧå ä¸ēå¨ææĄŖįæäšåīŧåžéžįŽåēåŽį MD5ã
é¤äē Transfer-EncodingãTrailer äģĨå Content-Length éĻé¨äšå¤īŧå ļäģ HTTP éĻé¨éŊå¯äģĨäŊä¸ēææåéã
éĒč¯į åæ°é˛åēĻ
åŊææĄŖå¨åŽĸæˇįĢ¯âčŋæâäšå(äšå°ąæ¯č¯´īŧåŽĸæˇįĢ¯ä¸å莤ä¸ēč¯Ĩå¯æŦææ)īŧåŽĸæˇįĢ¯åŋ éĄģäģæåĄå¨č¯ˇæąä¸äģŊæ°įå¯æŦãä¸čŋīŧåĻæč¯ĨææĄŖå¨æåĄå¨ä¸åšļæĒåįæšåīŧåŽĸæˇ įĢ¯äšå°ąä¸éčĻåæĨæļä¸æŦĄäēââįģ§įģäŊŋį¨įŧåįå¯æŦåŗå¯ã
čŋį§įšæŽįč¯ˇæąīŧį§°ä¸ē æĄäģļč¯ˇæą(conditional request)
īŧčĻæąåŽĸæˇįĢ¯äŊŋį¨ éĒč¯į (validator)
æĨåįĨæåĄå¨åŽåŊåæĨæįįæŦåˇīŧåšļäģ
åŊåŽįåŊåå¯æŦä¸åæææļæčĻæąåéæ°įå¯æŦã
æ°é˛åēĻ
æåĄå¨åēåŊåįĨåŽĸæˇįĢ¯čŊå¤å°å
厚įŧåå¤éŋæļé´īŧå¨čŋä¸Ēæļé´äšå
å°ąæ¯æ°é˛įã æåĄå¨å¯äģĨį¨čŋ两ä¸ĒéĻé¨äšä¸æĨæäžčŋį§äŋĄæ¯: Expires(čŋæ)
å Cache- Control(įŧåæ§åļ)
ã
åŽĸæˇįĢ¯åæåĄå¨ä¸ēäēčŊæŖįĄŽäŊŋį¨ Expires éĻé¨īŧåŽäģŦįæļéåŋ éĄģåæĨã
æĄäģļč¯ˇæą(Conditional Requests)
HTTP ä¸ēåŽĸæˇįĢ¯æäžäēä¸į§æšæŗīŧäģ åŊčĩæēæšåæļæč¯ˇæąå¯æŦīŧ čŋį§įšæŽč¯ˇæąį§°ä¸ēææĄäģļįč¯ˇæąãææĄäģļįč¯ˇæąæ¯æ åį HTTP č¯ˇæąæĨæīŧäŊäģ åŊæä¸ĒįšåŽæĄäģļä¸ēįæļææ§čĄã
äžåĻīŧæä¸ĒįŧåæåĄå¨å¯čŊåéä¸éĸįææĄäģļ GET æĨæįģæåĄå¨īŧäģ åŊæäģļ /announce.html äģ 2002 åš´ 6 æ 29 æĨ(čŋæ¯įŧåįææĄŖæå čĸĢäŊč äŋŽæšįæļé´)äšååįæšåįæ åĩä¸æåéåŽ:
GET /announce.html HTTP/1.0
If-Modified-Since: Sat, 29 Jun 2002, 14:30:00 GMT
ææĄäģļįč¯ˇæąæ¯éčŋäģĨâIf-âåŧ头įææĄäģļįéĻé¨æĨåŽį°įã
éĒč¯į
æ¯ä¸ĒææĄäģļįč¯ˇæąéŊéčŋįšåŽįéĒč¯į æĨåæĨäŊį¨ãéĒč¯į æ¯ææĄŖåŽäžįä¸ä¸ĒįšæŽåąæ§īŧį¨åŽæĨæĩč¯æĄäģļæ¯åĻä¸ēįãäģæĻåŋĩä¸č¯´īŧäŊ å¯äģĨæéĒč¯į įäŊæäģļįåēååˇã įæŦåˇīŧæč æååįæšåįæĨææļé´ã
HTTPæéĒč¯į åä¸ē两įąģīŧåŧąéĒč¯į (weak validators)
å åŧēéĒč¯į (strong validators)
ã åŧąéĒč¯į ä¸ä¸åŽčŊå¯ä¸æ č¯čĩæēįä¸ä¸ĒåŽäžīŧčåŧēéĒč¯į åŋ
éĄģåĻæ¤ã
æåäŋŽæšæļé´īŧIf-Modified-SinceīŧčĸĢåŊäŊåŧąéĒč¯į īŧå ä¸ēå°ŊįŽĄåŽč¯´æäēčĩæēæåčĸĢäŋŽæšįæļé´īŧäŊåŽįæčŋ°į˛žåēĻæå¤§å°ąæ¯ 1 į§ã
ETag éĻé¨čĸĢåŊäŊåŧēéĒč¯į īŧå ä¸ēæ¯åŊčĩæēå 厚æšåæļīŧæåĄå¨éŊå¯äģĨå¨ ETag éĻé¨æžįŊŽä¸åįåŧã
ææļåīŧåŽĸæˇįĢ¯åæåĄå¨å¯čŊéčĻéį¨ä¸éŖäšį˛žįĄŽįåŽäŊæ 莰éĒč¯æšæŗãäžåĻīŧææåĄå¨å¯čŊæŗ寚ä¸ä¸Ēåžå¤§ãčĸĢåšŋæŗįŧåįææĄŖčŋčĄä¸äēįžåäŋŽéĨ°īŧäŊä¸æŗå¨įŧåæåĄå¨åéĒč¯æļäē§įåžå¤§įäŧ čžæĩéãå¨čŋį§æ åĩä¸īŧč¯ĨæåĄå¨å¯äģĨå¨æ 莰åéĸå ä¸âW/âåįŧæĨåšŋæä¸ä¸ĒâåŧąâåŽäŊæ 莰ã
čå´č¯ˇæąīŧRange Requestsīŧ
å ŗäēåŽĸæˇįĢ¯åĻäŊčĻæąæåĄå¨åĒå¨čĩæēįåŽĸæˇįĢ¯å¯æŦä¸åææįæ åĩä¸æåéå ļå¯æŦīŧ æäģŦåˇ˛įģæ¸ æĨå°įč§ŖäēãHTTP čŋčŋä¸æĨéĻä¸æˇģčąīŧåŽå 莸åŽĸæˇįĢ¯åŽé ä¸åĒč¯ˇæąæ æĄŖįä¸é¨åīŧæč č¯´æä¸Ēčå´ã
æäēčå´č¯ˇæąīŧHTTP åŽĸæˇįĢ¯å¯äģĨéčŋč¯ˇæąæžčˇåå¤ąč´ĨįåŽäŊįä¸ä¸Ēčå´(æč č¯´ä¸é¨å)īŧæĨæĸå¤ä¸čŊŊč¯ĨåŽäŊãåŊįļčŋæä¸ä¸ĒåæīŧéŖå°ąæ¯äģåŽĸæˇįĢ¯ä¸ä¸æŦĄč¯ˇæąč¯ĨåŽ äŊå°čŋæŦĄååēčå´č¯ˇæąįæļæŽĩå īŧč¯Ĩå¯ščąĄæ˛ĄææšåčŋãäžåĻ:
GET /bigfile.html HTTP/1.1
Host: www.joes-hardware.com
Range: bytes=4000-
User-Agent: Mozilla/4.61 [en] (WinNT; I) ...
å¨æŦäžä¸īŧåŽĸæˇįĢ¯č¯ˇæąįæ¯ææĄŖåŧ头 4000 åčäšåįé¨å(ä¸åŋ įģåēįģå°žåčæ°īŧ å ä¸ēč¯ˇæąæšå¯čŊä¸įĨéææĄŖį大å°)ãå¨åŽĸæˇįĢ¯æļå°äēåŧ头į 4000 åčäšåå°ąå¤ąč´Ĩįæ åĩä¸īŧå¯äģĨäŊŋį¨čŋį§åŊĸåŧįčå´č¯ˇæąã
åšļä¸æ¯æææåĄå¨éŊæĨåčå´č¯ˇæąīŧäŊåžå¤æåĄå¨å¯äģĨãæåĄå¨å¯äģĨéčŋå¨ååēä¸å åĢ Accept-Ranges éĻé¨įåŊĸåŧååŽĸæˇįĢ¯č¯´æå¯äģĨæĨåįčå´č¯ˇæąãčŋä¸ĒéĻé¨įåŧæ¯čŽĄįŽčå´įåäŊīŧé常æ¯äģĨåč莥įŽįãäžåĻīŧ
HTTP/1.1 200 OK
Date: Fri, 05 Nov 1999 22:35:15 GMT Server: Apache/1.2.4
Accept-Ranges: bytes
æļåčå´č¯ˇæąįä¸įŗģå HTTP äēåĄįäžåīŧ
Range éĻé¨å¨æĩčĄį įšå¯šįš(Peer-to-PeerīŧP2P)
æäģļå
ąäēĢåŽĸæˇįĢ¯čŊ¯äģļä¸åžå°åšŋæŗåēį¨īŧåŽäģŦäģä¸åį寚įåŽäŊåæļä¸čŊŊå¤åĒäŊæäģļįä¸åé¨åã
åˇŽåŧįŧį īŧDelta encodingīŧ
åĻæåŽĸæˇįĢ¯æä¸ä¸ĒéĄĩéĸįåˇ˛čŋæå¯æŦīŧå°ąčĻč¯ˇæąéĄĩéĸįææ°åŽäžãčĨæšåįå°æšæ¯čžå°īŧä¸å ļåéåŽæ´įæ°éĄĩéĸįģåŽĸæˇįĢ¯īŧåŽĸæˇįĢ¯æ´æŋææåĄå¨åĒåééĄĩéĸåįæšåįé¨åīŧčŋæ ˇå°ąå¯äģĨæ´åŋĢå°åžå°ææ°įéĄĩéĸã
åˇŽåŧįŧį æ¯ HTTP å莎įä¸ä¸ĒæŠåąīŧåŽéčŋäē¤æĸå¯ščąĄæšåįé¨åčä¸æ¯åŽæ´įå¯ščąĄæĨäŧåäŧ čžæ§čŊãåˇŽåŧįŧį äšæ¯ä¸įąģåŽäžææ§īŧå ä¸ēåŽäžčĩåŽĸæˇįĢ¯åæåĄå¨äšé´é寚įšåŽįå¯ščąĄåŽäžæĨäē¤æĸäŋĄæ¯ãRFC 3229 æčŋ°äēåˇŽåŧįŧį ã
åĻæåŽĸæˇįĢ¯æŗåč¯æåĄå¨åŽæŋææĨåč¯ĨéĄĩéĸįåˇŽåŧīŧåĒčĻåé A-IM éĻé¨
å°ąå¯äģĨäēãA-IM æ¯ Accept-Instance-Manipulation(æĨååŽäžææ§)
įįŧŠåã
å¨ A-IM éĻé¨ä¸īŧåŽĸæˇįĢ¯äŧč¯´æåŽįĨéåĒäēįŽæŗå¯äģĨæåˇŽåŧåēį¨äēčįæŦčåžå°ææ°įæŦã
æåĄįĢ¯åéåä¸éĸčŋäēå
厚īŧä¸ä¸ĒįšæŽįååēäģŖį ââ 226 IM Used
īŧåįĨåŽĸæˇįĢ¯åŽæŖå¨åéįæ¯æč¯ˇæąå¯ščąĄįåŽäžææ§īŧčä¸æ¯éŖä¸ĒåŽæ´įå¯ščąĄčĒčēĢīŧä¸ä¸Ē IM(Instance-Manipulation įįŧŠå) éĻé¨īŧč¯´æį¨äē莥įŽåˇŽåŧįįŽæŗīŧæ°į ETag éĻé¨
å Delta-Base éĻé¨
īŧč¯´æį¨äē莥įŽåˇŽåŧįåēįēŋææĄŖį ETagã
æåĄå¨äž§įâåˇŽåŧįæå¨âæ šæŽåēįēŋææĄŖåč¯ĨææĄŖįææ°åŽäžīŧį¨åŽĸæˇįĢ¯å¨ A-IM éĻé¨ä¸ææįįŽæŗ莥įŽåŽäģŦäšé´įåˇŽåŧãåŽĸæˇįĢ¯äž§įâåˇŽåŧåēį¨å¨â åžå°åˇŽåŧīŧå°å
ļåēį¨äēåēįēŋææĄŖīŧåžå°ææĄŖįææ°åŽäžãäžåĻīŧåĻæäē§įåˇŽåŧįįŽ æŗæ¯ Unix įŗģįģį diff-e
åŊäģ¤īŧåŽĸæˇįĢ¯å°ąå¯äģĨį¨ Unix įŗģįģä¸įææŦįŧčžå¨ ed æäžį åčŊæĨåēį¨åˇŽåŧã
åˇŽåŧįŧį æį¨įéĻé¨
ETag
ææĄŖæ¯ä¸ĒåŽäžįå¯ä¸æ č¯įŦĻãįąæåĄå¨å¨ååēä¸åé;åŽĸæˇįĢ¯å¨åįģ§č¯ˇæąį If-Match éĻé¨å If-None-Match éĻé¨ä¸å¯äģĨäŊŋį¨åŽ
If-None-Match
åŽĸæˇįĢ¯åéįč¯ˇæąéĻé¨īŧåŊä¸äģ åŊåŽĸæˇįĢ¯įææĄŖįæŦä¸æåĄå¨ä¸åæļīŧæåæåĄå¨č¯ˇæąč¯ĨææĄŖ
A-IM
åŽĸæˇįĢ¯č¯ˇæąéĻé¨īŧč¯´æå¯äģĨæĨåįåŽäžææ§įąģå
IM
æåĄå¨ååēéĻé¨īŧč¯´æäŊį¨å¨ååēä¸įåŽäžææ§įįąģåãåŊååēäģŖį æ¯226 IM Used æļīŧäŧåéčŋä¸ĒéĻé¨
Delta-Base
æåĄå¨ååēéĻé¨īŧč¯´æį¨äē莥įŽåˇŽåŧįåēįēŋææĄŖį ETag åŧ(åēåŊä¸åŽĸæˇįĢ¯č¯ˇæą ä¸į If-None-Match éĻé¨éį ETag į¸å)
åč
给力,如果能有实际项目的抓包和代理就好了