HTTP розрізняє два властивості:
Ідентифікація визначається специфікацією так:
Методи також можуть мати властивість " idempotence ", оскільки (окрім помилок чи проблем із закінченням терміну дії) побічні ефекти N> 0 однакових запитів такі самі, як і для одного запиту. Методи GET, HEAD, PUTі DELETEволодіють цією властивістю. Крім того , методи OPTIONSі TRACE НЕ ПОВИННО мати побічні ефекти, і тому по своїй суті ідемпотентна.
І безпека:
Зокрема, було встановлено конвенцію про те, що методи GETта HEADметоди НЕ повинні мати значення для вжиття інших дій, ніж пошук. Ці методи слід вважати " безпечними ". Це дозволяє агентам користувача представляти інші методи, такі як POST, PUTі DELETE, особливим чином, щоб користувач ознайомився з тим, що вимагається можлива небезпечна дія.
Природно, неможливо забезпечити, щоб сервер не генерував побічні ефекти в результаті виконання GETзапиту; насправді деякі динамічні ресурси вважають цю особливість. Тут важливим є те, що користувач не вимагав побічних ефектів, тому не може нести за них відповідальність.
Зауважте, що безпека передбачає ідентифікацію: якщо метод не має побічних ефектів, то його виконання кілька разів призведе до того ж побічного ефекту, що і один раз, а саме жодного.
Це розподіляє методи на три категорії:
- сейф (і , отже , також ідемпотентна)
GET, HEAD, OPTION,TRACE
- ідемпотентів але не завжди безпечно:
PUT,DELETE
- ні безпосереднім, ні безпечним:
POST
PUT не повинен мати побічних ефектів.
Це неправильно. PUTє безсильним, але не безпечним. Весь сенс в PUTце мати побічний ефект, а саме оновлення ресурсу. Що означає idempotency, це те, що оновлення одного і того ж ресурсу з тим самим вмістом кілька разів повинно мати такий же ефект, як оновлення його лише один раз.
Зверніть увагу на останній абзац у розділі про безпеку [наголос міни]:
Природно, неможливо забезпечити, щоб сервер не генерував побічні ефекти в результаті виконання GETзапиту; насправді деякі динамічні ресурси вважають цю особливість. Тут важливим є те, що користувач не вимагав побічних ефектів, тому не може нести за них відповідальність .
Хоча це речення говорить про GETбезпеку та безпеку, ми можемо припустити, що автори також мали на меті застосувати ті ж міркування PUTта ідентичність. IOW: PUTповинен мати лише один видимий для користувача побічний ефект, а саме оновлення названого ресурсу. У нього можуть бути й інші побічні ефекти, але користувач не може нести за них відповідальність.
Наприклад, той факт, що PUTє ідентичним, означає, що я можу повторювати його так часто, як мені хочеться: специфікація гарантує, що його виконання кілька разів буде точно таким же, як його виконати один раз. Цілком справедливо створити відставання старих версій як побічний ефект цих кількох PUTзапитів. Однак, якщо в результаті багаторазових повторних робіт ваша база даних заповнить відсталі старі версії, це не моя проблема, це ваша.
IOW: вам дозволяється мати стільки побічних ефектів, скільки ви хочете, але
- він повинен виглядати перед користувачем так, ніби їхні запити ідентичні
- ви відповідаєте за ці побічні ефекти, а не за користувача