Розробник додатків дійсно перевіряє E-тег і надає цю логіку. Це не магія, що веб-сервер робить для вас, оскільки він знає лише, як обчислити E-Tag
заголовки для статичного вмісту. Тож давайте візьмемо ваш сценарій вище та розберемо, як має відбуватися взаємодія.
GET /projects/1
Сервер отримує запит, визначає Е-тег для цієї версії запису, повертаючи його з фактичним вмістом.
200 - OK
E-Tag: "412"
Content-Type: application/json
{modified: false}
Оскільки клієнт тепер має значення E-Tag, він може включати це у PUT
запит:
PUT /projects/1
If-Match: "412"
Content-Type: application/json
{modified: true}
На даний момент у вашій заяві потрібно зробити наступне:
- Переконайтеся, що електронний тег все-таки правильний: "412" == "412"?
- Якщо так, зробіть оновлення та обчисліть новий E-тег
Надішліть відповідь про успіх.
204 No Content
E-Tag: "543"
Якщо з'являється інший запит і намагається виконати PUT
подібний із вищезазначеним запитом, другий раз, коли ваш код сервера оцінює його, ви несете відповідальність за надання повідомлення про помилку.
- Переконайтесь, що електронний тег все-таки правильний: "412"! = "543"
У разі відмови надішліть відповідь про помилку.
412 Precondition Failed
Це код, який ви насправді повинні писати. Фактично E-тегом може бути будь-який текст (у межах, визначених у специфікації HTTP). Це не повинно бути числом. Це може бути і хеш-значення.