Это не является предметом споров, когда вы выкладываете факты или читаете спецификацию HTTP и HTTPbis.
ETag - это средство кэширования и контроля параллелизма.Слабые ETag - только средство кэширования бедняков.
С точки зрения кэширования (GET) - uri + content-type + etag может помочь вам сэкономить пропускную способность, не отвечая также на полезную нагрузку, но только с помощьюКод состояния 304.
С точки зрения управления параллелизмом (POST; PUT; PATCH) - стремительно рассчитывать ETag на основе URI + тип контента + полезная нагрузка ответа с точным битом.Почему?
- Если вы вычисляете ETag на основе целого объекта, расширенного набора полезной нагрузки ответа (т. Е. Ваша полезная нагрузка дает a + b, но объект на самом деле a + b + c),затем выполнение PATCH, например, приведет к сбою, потому что ETag изменился ... вы обновляете ... вы получаете те же данные, но другой ETag ... вы повторяете PATCH с новым ETag, теперь он работает. FAIL
- Если вы вычисляете ETag на основе подмножества полезной нагрузки, вы фактически лишаете пользователя возможности контролировать условия небезопасного вызова без какой-либо прозрачности вообще.PATCH будет успешным, даже если изменились данные, связанные с этим ETag, что явно не соответствует тому, как был задан HTTP-запрос. FAIL
Условные запросы должны обрабатываться с помощью семантики, аналогичной "Учитывая, что мой взгляд на мир все тот же, затем выполните запрос. В противном случае выполните ошибку".Мой взгляд на мир сделан из прошлого ответа (URI + заголовки + полезная нагрузка).