Идея в том, что между POST и PUT должна быть разница, а не в том, что она есть.Для пояснения, POST-запрос в идеале должен создать новый ресурс, тогда как PUT-запрос должен использоваться для обновления существующего.Таким образом, клиент, отправляющий два запроса POST, создаст два ресурса, тогда как два запроса PUT не будут (или, скорее, не должны) вызывать нежелательные изменения.
Если говорить более подробно, идемпотентность означает, что в изолированномСреда множественных запросов от одного и того же клиента никак не влияет на состояние ресурса.Если запрос от другого клиента изменяет состояние ресурса, это не нарушает принцип идемпотентности.Хотя, если вы действительно хотите, чтобы запрос на размещение не переопределил изменения другим одновременным запросом от другого клиента, вы всегда должны использовать etags.Чтобы уточнить, запрос put должен всегда предоставлять etag (полученный из запроса get) последнего состояния ресурса, и только если etag является последним, ресурс должен обновляться, в противном случае должен быть поднят код состояния 412 (Precondition Failed).В случае 412 клиент должен снова получить ресурс и затем попробовать обновить.Согласно REST, это жизненно важно для предотвращения состояния гонки.
Согласно W3C (http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html),
'Методы также могут иметь свойство "идемпотентности" в этом ( кроме вопросов об ошибках или истечении срока действия ) побочные эффекты от N> 0 идентичных запросов такие же, как и для одного запроса. '