ETag
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since иÑÐ»Ñ 2015 г..
Ðаголовок HTTP оÑвеÑа ETag ÑвлÑеÑÑÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑом ÑпеÑиÑиÑеÑкой веÑÑии ÑеÑÑÑÑа. Ðн позволÑÐµÑ Ð±Ð¾Ð»ÐµÐµ ÑÑÑекÑивно иÑполÑзоваÑÑ ÐºÐµÑ Ð¸ ÑоÑ
ÑанÑÐµÑ Ð¿ÑопÑÑкнÑÑ ÑпоÑобноÑÑÑ, позволÑÑ ÑеÑвеÑÑ Ð¾ÑпÑавлÑÑÑ Ð½Ðµ веÑÑ Ð¾ÑвеÑ, еÑли ÑодеÑжимое не изменилоÑÑ. С дÑÑгой ÑÑоÑонÑ, еÑли конÑÐµÐ½Ñ Ð²Ñе-Ñаки поменÑлÑÑ, Etag Ð¿Ð¾Ð¼Ð¾Ð³Ð°ÐµÑ Ð¿ÑедоÑвÑаÑиÑÑ Ð¾Ð´Ð½Ð¾Ð²Ñеменное обновление ÑеÑÑÑÑа Ð¾Ñ Ð¿ÐµÑезапиÑи дÑÑг дÑÑга ("воздÑÑÐ½Ð°Ñ ÐºÐ¾Ð»Ð»Ð¸Ð·Ð¸Ñ").
ÐÑли ÑеÑÑÑÑ Ð¿Ð¾ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð¼Ñ URL изменилÑÑ, бÑÐ´ÐµÑ ÑгенеÑиÑованно новое знаÑение Etag. ÐоÑÑÐ¾Ð¼Ñ Etag Ñем-Ñо поÑ
ож на оÑпеÑаÑок ("fingerprints") и Ð¼Ð¾Ð¶ÐµÑ Ñакже бÑÑÑ Ð¸ÑполÑзован Ð´Ð»Ñ Ð¾ÑÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¿ÑедназнаÑÐµÐ½Ð¸Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ
ÑеÑвеÑов. СÑавнение ÑÑиÑ
заголовков позволÑÐµÑ Ð±ÑÑÑÑо опÑеделиÑÑ ÑвлÑÑÑÑÑ Ð»Ð¸ два пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑеÑÑÑÑа одними и Ñеме же. ÐÑÑлеживаемÑй ÑеÑÐ²ÐµÑ Ñакже Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð´Ð°ÑÑ ÑоÑ
ÑанÑÑÑ Ð¸Ñ
поÑÑоÑнно.
| Тип заголовка | Ðаголовок оÑвеÑа |
|---|---|
| ÐапÑеÑÑнное Ð¸Ð¼Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° | Ð½ÐµÑ |
СинÑакÑиÑ
ETag: W/"<etag_value>" ETag: "<etag_value>"
ÐиÑекÑивÑ
W/ÐеобÑзаÑелÑнÑй-
'W/'(ÑÑвÑÑвиÑелен к ÑегиÑÑÑÑ) ÑказÑваеÑ, ÑÑо иÑполÑзÑеÑÑÑ ÑлабÑй валидаÑоÑ. СлабÑе валидаÑоÑÑ Ð»ÐµÐ³ÐºÐ¾ ÑгенеÑиÑоваÑÑ, но они намного Ñеже иÑполÑзÑÑÑÑÑ Ð´Ð»Ñ ÑÑавнениÑ. СилÑнÑе валидаÑоÑÑ Ð¸Ð´ÐµÐ°Ð»ÑÐ½Ñ Ð´Ð»Ñ ÑÑавнениÑ, но Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾ÑÐµÐ½Ñ Ñложно ÑгенеÑиÑоваÑÑ ÑÑÑекÑивно. Слабое знаÑениеEtagдвÑÑ Ð¿ÑедÑÑавлений одного и Ñого же ÑеÑÑÑÑа Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑеманÑиÑеÑки одинаково, но не байÑ-в-байÑ. - "<etag_value>"
-
ТÑг ÑÑÑноÑÑи, ÑникалÑно пÑедÑÑавлÑÑÑий запÑаÑиваемÑй ÑеÑÑÑÑ. ÐÑо ÑÑÑока ASCII кодов, заклÑÑÑÐ½Ð½Ð°Ñ Ð² двойнÑе кавÑÑки (напÑимеÑ,
"675af34563dc-tr34"). ÐеÑод, по коÑоÑÐ¾Ð¼Ñ Ð³ÐµÐ½ÐµÑиÑÑÑÑÑÑ Ð·Ð½Ð°ÑениÑETag, не опÑеделÑн. ÐбÑÑно, иÑполÑзÑеÑÑÑ Ñ ÑÑ ÐºÐ¾Ð½ÑенÑа, Ñ ÑÑ Ð¿Ð¾Ñледнего вÑемени модиÑикаÑии или пÑоÑÑо Ð½Ð¾Ð¼ÐµÑ Ñевизии. ÐапÑимеÑ, MDN иÑполÑзÑÐµÑ ÑеÑÑнадÑаÑеÑиÑнÑÑ Ñ ÑÑ wiki-ÑодеÑжимого.
ÐÑимеÑÑ
ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4" ETag: W/"0815"
Ðак избежаÑÑ ÐºÐ¾Ð»Ð»Ð¸Ð·Ð¸Ð¹ в пÑоÑеÑÑе ÑабоÑÑ Ð¿ÑиложениÑ
С помоÑÑÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ¾Ð² ETag и If-Match, ÑÑÑеÑÑвÑÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¾Ð±Ð½Ð°ÑÑжиÑÑ ÐºÐ¾Ð»Ð»Ð¸Ð·Ð¸Ð¸ в пÑоÑеÑÑе ÑабоÑÑ Ð¿ÑиложениÑ.
ÐапÑимеÑ, пÑи ÑедакÑиÑовании MDN, ÑекÑÑее ÑодеÑжимое ÑÑаÑÑи заÑ
еÑиÑовано и помеÑено в оÑÐ²ÐµÑ Ð¿Ñи помоÑи заголовка Etag:
ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"
ÐÑи ÑоÑ
Ñанении изменений в ÑÑаÑÑе (даннÑе оÑпÑавлÑÑÑÑÑ), POST запÑÐ¾Ñ Ð±ÑÐ´ÐµÑ ÑодеÑжаÑÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº If-Match, знаÑение коÑоÑого ÑквиваленÑно знаÑÐµÐ½Ð¸Ñ ETag. ÐÑо позволÑÐµÑ Ð¿ÑовеÑиÑÑ Ð°ÐºÑÑалÑноÑÑÑ Ð´Ð°Ð½Ð½ÑÑ
.
If-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"
ÐÑли Ñ
ÑÑи из заголовков не ÑовпадаÑÑ, ÑÑо ознаÑÐ°ÐµÑ ÑÑо даннÑе Ñже бÑли Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ñ Ð¼ÐµÐ¶Ð´Ñ Ð·Ð°Ð¿ÑоÑами (in-between) и бÑÐ´ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑена оÑибка 412 Precondition Failed.
ÐеÑиÑование неизменÑемÑÑ ÑеÑÑÑÑов
ÐÑÑÐ³Ð°Ñ ÑипиÑÐ½Ð°Ñ ÑиÑÑаÑÐ¸Ñ Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ETag â кеÑиÑование ÑеÑÑÑÑов, коÑоÑÑе не бÑдÑÑ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑÑÑ. ÐÑли полÑзоваÑÐµÐ»Ñ Ð¿Ð¾Ð²ÑоÑно поÑеÑÐ°ÐµÑ URL-адÑÐµÑ (Ñ ÑÑÑановленнÑм заголовком ETag), и пÑи ÑÑом даннÑе ÑлиÑком ÑÑÑаÑели и не могÑÑ Ð±ÑÑÑ Ð¸ÑполÑзованÑ, Ñогда ÐºÐ»Ð¸ÐµÐ½Ñ Ð¾ÑпÑÐ°Ð²Ð¸Ñ Ð·Ð½Ð°Ñение ETag внÑÑÑи заголовка If-None-Match:
If-None-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"
ÐоÑле Ñего ÑеÑÐ²ÐµÑ ÑÑÐ°Ð²Ð½Ð¸Ñ ÐºÐ»Ð¸ÐµÐ½ÑÑкий ETag (оÑпÑавленнÑй Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ If-None-Match) Ñ ETag Ð´Ð»Ñ ÑекÑÑей веÑÑии ÑеÑÑÑÑа и, еÑли иÑ
знаÑÐµÐ½Ð¸Ñ ÑовпадаÑÑ (Ñ.е. ÑеÑÑÑÑÑ Ð½Ðµ бÑли измененÑ), ÑеÑÐ²ÐµÑ Ð²ÐµÑнÑÑ ÑÑаÑÑÑ 304 Not Modified, без Ñела оÑвеÑа. Такой оÑÐ²ÐµÑ ÑеÑвеÑа ÑообÑÐ°ÐµÑ ÐºÐ»Ð¸ÐµÐ½ÑÑ, ÑÑо закеÑиÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ Ð²ÐµÑÑÐ¸Ñ ÑеÑÑÑÑа акÑÑалÑна и гоÑова к иÑполÑзованиÑ.
СпеÑиÑикаÑии
| Specification | Title |
|---|---|
| RFC 7232, Ñаздел 2.3: ETag | Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests |
СовмеÑÑимоÑÑÑ Ñ Ð±ÑаÑзеÑами
СмоÑÑиÑе Ñакже
If-MatchIf-None-Match304Not Modified412Precondition Failed- W3C Note: Editing the Web â Detecting the Lost Update Problem Using Unreserved Checkout