COMPUTER ENGINEER

Örneklere git
Blog
HTTP / HTTPS / TLS6 dk çalışma
17/ 70

Durum kodları · 1xx–5xx

409, 412 ve 428: çakışma ve kayıp güncelleme

Veri yarışı, ETag önkoşulu ve iş kuralı çakışmasını ayır.

AnlaÖrneği inceleKendin uygula

Kavramı anlayalım

İki kullanıcı aynı kaydı okuduğunda son yazan diğerinin değişikliğini sessizce silebilir. If-Match ile istemci okuduğu ETag sürümünü gönderir. Sunucu güncel sürümle eşleşme bulamazsa 412 Precondition Failed döner. Kontrol ve yazma veritabanında atomik olmalıdır; önce SELECT sonra kontrolsüz UPDATE yapmak yarışı çözmez.

428 Precondition Required, API’nin güncellemede koşullu istek zorunluluğunu anlatır. Önkoşul hiç gönderilmemişken 428; gönderilmiş ama sağlanmıyorken 412 düşünülebilir. 428 yanıtları cache’lenmemelidir. 409 Conflict, isteğin kaynak durumuyla çatışmasıdır: zaten kapatılmış siparişi yeniden onaylamak veya benzersizlik kuralına aykırı durum bunun örnekleri olabilir. Her database exception’ını 409’a çevirmek doğru değildir.

Frontend 412 alınca güncel temsil ve değişiklikleri karşılaştırıp kullanıcıya birleştirme seçeneği sunabilir. Kör retry aynı eski ETag’i yeniden yollar ve veri kaybını gizleyebilir. If-None-Match koşulunun methoda göre 304 veya 412 üretebileceğini öğren: cache doğrulayan GET ile koşullu yazma aynı sonuç değildir. ETag bir yetki mekanizması değildir; yetki denetimi ayrıca gerekir.

NERESİNDE KULLANIRSIN?

Çok kullanıcılı editör ve panel kayıtlarını güvenle güncellerken.

SIK YAPILAN HATA

ETag denetimini yazmadan ayrı yapmak ve yarışın çözüldüğünü sanmak.

01 / UYGULAMA

Aynı konu. Üç farklı derinlik.

HTTP / temsili örnek
If-Match: "v3"

HTTP/1.1 412 Precondition Failed

Sunucuda artık v4 var; eski bilgiyle yazma reddedildi.

Bu sayfa dış sunuculara istek göndermez. HTTP mesajları temsili, HTTP/1.1 biçiminde okunabilir gösterimlerdir; HTTP/2 ve HTTP/3 wire formatı değildir. example.test ayrılmış öğretim alan adıdır. Komut ve JavaScript örneklerini yalnız kendi test ortamında uygula; gerçek token veya cookie yayımlama.

02 / SIRA SENDE

Önce kendin dene.

ETag zorunlu endpoint’e If-Match göndermedin. 412 mi 428 mi?

Çözümü ve açıklamasını göster
Açıklamalı çözüm
HTTP/1.1 428 Precondition Required

Politika önkoşul istiyor; başarısız bir karşılaştırma henüz yok.