Content-Digest
HTTP Content-Digest 请æ±åååºæ 头æä¾ä¸ä¸ªä½¿ç¨æ£åç®æ³è®¡ç®çæ¶æ¯å
容æè¦ãæ¥æ¶è
å¯ä»¥ä½¿ç¨ Content-Digest æ¥éªè¯ HTTP æ¶æ¯å
容ç宿´æ§ã
Want-Content-Digest åæ®µå
许åéè
è¯·æ± Content-Digest åå
¶æ£åç®æ³å好ãå
容æè¦ä¼æ ¹æ® Content-Encoding å Content-Range èææä¸åï¼ä½ä¸ä¼åå° Transfer-Encoding çå½±åã
å¨æäºæ
åµä¸ï¼Repr-Digest å¯ç¨äºéªè¯å®æ´è¡¨ç¤ºä¸çé¨åæå¤é¨åæ¶æ¯ç宿´æ§ãä¾å¦ï¼å¨èå´è¯·æ±ä¸ï¼å¦æä»
请æ±çåèèå´ä¸åï¼å Repr-Digest å°å§ç»å
·æç¸åçå¼ï¼èå
容æè¦åå¯¹äºæ¯ä¸ªé¨åèææä¸åãå æ¤ï¼å½è¡¨ç¤ºå¨åéåä¸ªæ¶æ¯æ¶ï¼Content-Digest ä¸ Repr-Digest ç¸åã
| æ 头类å | è¯·æ±æ 头ãååºæ 头ã表示æ 头 |
|---|---|
| ç¦æ¢ä¿®æ¹çæ 头 | å¦ |
è¯æ³
Content-Digest: <digest-algorithm>=<digest-value>
// Multiple digest algorithms
Content-Digest: <digest-algorithm>=<digest-value>,<digest-algorithm>=<digest-value>, â¦
æä»¤
<digest-algorithm>-
ç¨äºåå»ºæ¶æ¯å 容æè¦çç®æ³ãåªæä¸¤ç§æ³¨åçæè¦ç®æ³è¢«è®¤ä¸ºæ¯å®å ¨çï¼
sha-512åsha-256ãä¸å®å ¨ï¼æ§çï¼ç注åæè¦ç®æ³å æ¬ï¼md5ãshaï¼SHA-1ï¼ãunixsumãunixcksumãadlerï¼ADLER32ï¼åcrc32cã <digest-value>-
使ç¨
<digest-algorithm>å¯¹æ¶æ¯å å®¹è®¡ç®æè¦åçåèåºåãæè¦ç®æ³çéæ©ä¹å³å®äºä½¿ç¨çç¼ç ç±»åï¼sha-512åsha-256ä½¿ç¨ base64 ç¼ç ï¼èä¸äºæ§çæè¦ç®æ³ï¼å¦unixsumï¼ä½¿ç¨åè¿å¶æ´æ°ãä¸è§èçæ©æèæ¡ä¸åï¼æ åç base64 ç¼ç æè¦åèåºå被ä½ä¸ºåå ¸è¯æ³çä¸é¨åå è£ å¨åå·ï¼:ï¼ASCII 0x3Aï¼ä¸
æè¿°
以åçè§èä¸å®ä¹äº Digest æ 头ï¼ä½äºå®è¯æå®åå¨é®é¢ï¼å 为æè¦çåºç¨èå´ä¸æç¡®ãå
·ä½æ¥è¯´ï¼å¾é¾åºåæè¦æ¯åºç¨äºæ´ä¸ªèµæºè¿æ¯åºç¨äº HTTP æ¶æ¯çç¹å®å
容ãå æ¤ï¼è§å®äºä¸¤ä¸ªåç¬çæ 头ï¼Content-Digest å Repr-Digestï¼æ¥åå«ä¼ è¾¾ HTTP æ¶æ¯å
容æè¦åèµæºè¡¨ç¤ºæè¦ã
示ä¾
>ç¨æ·ä»£çè¯·æ± SHA-256 Content-Digest
å¨ä»¥ä¸ç¤ºä¾ä¸ï¼ç¨æ·ä»£ç请æ±å¯¹æ¶æ¯å 容è¿è¡æè¦ï¼ä¼å ä½¿ç¨ SHA-256ï¼å ¶æ¬¡ä¸º SHA-1ï¼ï¼
GET /items/123 HTTP/1.1
Host: example.com
Want-Content-Digest: sha-256=10, sha=3
æå¡å¨çååºå¸¦ææ¶æ¯å
容ç Content-Digestï¼ä½¿ç¨ SHA-256 ç®æ³ï¼ï¼
HTTP/1.1 200 OK
Content-Type: application/json
Content-Digest: sha-256=:RK/0qy18MlBSVnWgjwz6lZEWjP/lF5HF9bvEF8FabDg=:
{"hello": "world"}
ç¸åç Content-Digest å Repr-Digest å¼
ç¨æ·ä»£ç请æ±èµæºï¼ä¸å¸¦æ Want-Content-Digest åæ®µï¼ï¼
GET /items/123 HTTP/1.1
Host: example.com
æå¡å¨é
置为å¨ååºä¸åéæªç»è¯·æ±çæè¦æ 头ãRepr-Digest å Content-Digest åæ®µå
·æç¸å¹é
çå¼ï¼å 为å®ä»¬ä½¿ç¨ç¸åçç®æ³ï¼ä¸å¨æ¬ä¾ä¸ï¼æ´ä¸ªèµæºå¨ä¸æ¡æ¶æ¯ä¸åéï¼
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 19
Content-Digest: sha-256=:RK/0qy18MlBSVnWgjwz6lZEWjP/lF5HF9bvEF8FabDg=:
Repr-Digest: sha-256=:RK/0qy18MlBSVnWgjwz6lZEWjP/lF5HF9bvEF8FabDg=:
{"hello": "world"}
ä¸åç Content-Digest å Repr-Digest å¼
妿éå¤ä¸ä¸ä¾ç¸åç请æ±ï¼ä½ä½¿ç¨ HEAD æ¹æ³æ¥ä»£æ¿ GETï¼å Repr-Digest å Content-Digest åæ®µå°ä¸åï¼
GET /items/123 HTTP/1.1
Host: example.com
Repr-Digest å¼ä¸ä¸ä¾ç¸åï¼ä½å ä¸ºæ¶æ¯æ£æä¸ºç©ºï¼æå¡å¨å°åéä¸ä¸ªä¸åç Content-Digestï¼
HTTP/1.1 200 OK
Content-Type: application/json
Content-Digest: sha-256=:47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=:
Repr-Digest: sha-256=:RK/0qy18MlBSVnWgjwz6lZEWjP/lF5HF9bvEF8FabDg=:
ç¨æ·ä»£çå¨è¯·æ±ä¸åé Content-Digest
å¨ä»¥ä¸ç¤ºä¾ä¸ï¼ç¨æ·ä»£çåéæ¶æ¯å
容çæè¦ï¼ä½¿ç¨ SHA-512 ç®æ³ï¼ãå®åæ¶åé Content-Digest å Repr-Digestï¼è¿ä¸¤ä¸ªæè¦å 为 Content-Encoding èä¸åï¼
POST /bank_transfer HTTP/1.1
Host: example.com
Content-Encoding: zstd
Content-Digest: sha-512=:ABCâ¦=:
Repr-Digest: sha-512=:DEFâ¦=:
{
"recipient": "Alex",
"amount": 900000000
}
æå¡å¨å¯ä»¥è®¡ç®å·²æ¥æ¶å
容çæè¦ï¼å¹¶å°ç»æä¸ Content-Digest æ Repr-Digest æ 头è¿è¡æ¯è¾ï¼ä»¥éªè¯æ¶æ¯ç宿´æ§ãå¨ç±»ä¼¼ä¸è¿°ç¤ºä¾ç请æ±ä¸ï¼Repr-Digest 对æå¡å¨æ´ä¸ºæç¨ï¼å ä¸ºå®æ¯æ ¹æ®è§£ç åç表示计ç®åºæ¥çï¼å¨ä¸åæ
åµä¸ä¼æ´å ä¸è´ã
è§è
| è§è |
|---|
| Digest Fields > # section-2 > |
æµè§å¨å ¼å®¹æ§
æ¤æ 头没æè§èå®ä¹çæµè§å¨éæï¼âæµè§å¨å
¼å®¹æ§âä¸éç¨ï¼ãå¼åè
å¯ä»¥ä½¿ç¨ fetch() 设置åè·å HTTP æ 头以å®ç°ç¹å®äºåºç¨ç¨åºçå®ç°è¡ä¸ºã
åè§
Want-Content-Digestæ 头ç¨äºè¯·æ±å 容æè¦Repr-DigestãWant-Repr-Digest表示æè¦æ 头ETag- ç¨äº API ç æ°åç¾å SDK æå使ç¨
Content-Digestå¨ HTTP è°ç¨ä¸è¿è¡æ°åç¾åï¼developer.ebay.comï¼