HTTP iki özelliği birbirinden ayırır:
İdempotency spec tarafından aşağıdaki gibi tanımlanır:
Metodlar ayrıca " idempotence " özelliğine de sahip olabilirler (bu, hata veya son kullanma sorunlarının yanı sıra) N> 0 özdeş isteklerin yan etkilerinin tek bir istekle aynı olmasıdır. Yöntemleri GET
, HEAD
, PUT
ve DELETE
bu özelliği paylaşır. Ayrıca, yöntemler OPTIONS
ve yan etkileri TRACE
OLMAMALIDIR ve bu nedenle doğası gereği idempotenttir.
Ve Güvenlik:
Özellikle, sözleşmenin GET
ve HEAD
yöntemlerinin geri alma dışında bir işlem yapmanın önemi OLMAMASI gerektiği belirlenmiştir. Bu yöntemler " güvenli " olarak kabul edilmelidir . Bu kullanıcı ajanları gibi başka yöntemler, temsil edilmesini sağlar POST
, PUT
ve DELETE
kullanıcı bir olasılıkla güvensiz bir eylem talep ediliyor farkında yapılır böylece, özel bir şekilde,.
Doğal olarak, bir GET
isteğin gerçekleştirilmesi sonucunda sunucunun yan etkiler yaratmamasını sağlamak mümkün değildir ; Aslında, bazı dinamik kaynaklar bir özellik olduğunu düşünüyor. Buradaki önemli ayrım, kullanıcının yan etkileri talep etmemesidir, bu nedenle kendilerinden sorumlu tutulamaz.
Güvenliğin idempotency anlamına geldiğine dikkat edin: eğer bir yöntemin yan etkisi yoksa, birden çok kez gerçekleştirilmesi, bir kez gerçekleştirilmesi ile aynı yan etkiyi, yani hiçbirini vermez.
Bu, yöntemleri üç kategoriye ayırır:
- Kasa (bu nedenle de ve İdempotent)
GET
, HEAD
, OPTION
,TRACE
- İdempotent ancak mutlaka güvenli değildir:
PUT
,DELETE
- ne idempotent ne de güvenli:
POST
PUT'un hiçbir yan etkisi olmamalıdır.
Bu yanlış. PUT
idempotent ama güvenli değil. Bütün noktası arasında PUT
, yani bir kaynak güncelleme, bir yan etkiye sahip olmaktır. İdempotency, aynı kaynağı aynı içeriklerle birden çok kez güncellemenin, yalnızca bir kez güncellemekle aynı etkiye sahip olması gerektiği anlamına gelir.
Güvenlik ile ilgili bölümdeki son paragrafa dikkat edin:
Doğal olarak, bir GET
isteğin gerçekleştirilmesi sonucunda sunucunun yan etkiler yaratmamasını sağlamak mümkün değildir ; Aslında, bazı dinamik kaynaklar bir özellik olduğunu düşünüyor. Buradaki önemli ayrım, kullanıcının yan etkileri talep etmemesidir, bu nedenle kendilerinden sorumlu tutulamaz .
Bu cümle hakkında konuşmaktan GET
ve güvenlikten bahsetmekle birlikte, yazarların da aynı mantığı PUT
ve beceriksizliği uygulamak istediklerini varsayabiliriz . IOW: adlandırılmış kaynağı güncelleyen, PUT
yalnızca bir kullanıcı tarafından görülebilir yan etkiye sahip olmalıdır . Bu olabilir diğer yan etkilere sahip, ancak kullanıcı onlardan sorumlu tutulamaz.
Örneğin PUT
, idempotent olduğu gerçeği, istediğim kadar tekrar deneyebileceğim anlamına gelir: spec , birden çok kez çalıştırmanın, bir kez yürütmekle tamamen aynı olacağını garanti eder. Bu çoklu PUT
isteklerin bir yan etkisi olarak eski revizyonlar biriktirme listesi oluşturmak tamamen geçerlidir . Ancak, birden çok yeniden deneme sonucunda veritabanınız eski revizyonlardan oluşan bir birikim ile dolarsa, bu benim sorunum değil, bu sizin.
IOW: İstediğiniz kadar yan etkiye sahip olmanıza izin verilir, ancak
- kullanıcıya istekleri idempotent gibi görünmelidir
- bu yan etkilerden siz sorumlusunuz, kullanıcı değil