Das richtige Verhalten mit dem If-Match-header?
Laut RFC 2616, Generierung von entity-tags, die von HTTP-Servern ist optional. Allerdings konnte ich nicht finden, was ein bedingt - konforme HTTP-server tun sollte, wenn es erhält eine If-Match
(oder If-None-Match
) - header. Sollte es einfach ignorieren, diese Kopfzeilen, oder sollte Sie reagieren mit 412 Precondition Failed
?
UPD: Nur zur Klarstellung, ich gehe davon aus, dass der betreffende server nicht unterstützt entity-tags.
- Dieses ist eine sonderbare Frage, denn ETag ist ein Antwort-header, der vom server kommt. Wenn der client nicht die ETag-Wert vom server (da es nicht die Unterstützung von ETags), dann wo haben Sie es bekommen, und warum ist es so schicke es auf diesem server?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Während der RFC2616 ist implizit auf die Rolle, die Sie daraus ableiten, sagen 14.26 (If-None-Match), dass wenn der server keine übereinstimmung der Ressource mit den Tags, dann sollte es voran gehen mit Anfrage). Der 412-code, basierend auf meinem Verständnis der RFC2616 ist gedacht für Anfragen, die zu ändern, Staat (z.B. PUT, POST, DELETE).
Also, im Grunde, wenn der tag nicht mit (und wenn es fehlt auf der server-Seite ist nur eine von vielen möglichen Szenarien), dann sollte der server gehen Sie mit der Anfrage.
Es ist ein handliches HTTP Antwort-status-codes Aktivitätsdiagramm, die Sie verwenden können, um diese Frage zu beantworten.
Wenn Sie nicht unterstützen ETag und die Anforderung enthält ein If-Match anderen Wert als
*
Sie reagieren würde, mit einer 412. Und If-None-Match mit anderen Werten als*
kann komplett ignoriert werden.Im Gegensatz zu einer If-None-Match-header (Ignoranz, die nur schadet performance), ein IF-MATCH-Anfrage sollte sicher nicht und eine HTTP-return - /412, wenn der server nicht mit der geforderten Einheit. Die wohl häufigste Verwendung des IF-MATCH-header, wenn der client eine Reihe verlangen, und es sei denn, der server kann bestätigen, dass die Ressource wurde nicht verändert, es sollte nicht wieder der angeforderte Bereich, denn die Folge könnte eine Beschädigung der Daten auf dem client.
Nun, wenn der server weiß, dass es nicht ein Angebot anfordern, oder weiß, dass die client-Einheit muss in der Tat übereinstimmen (z.B. weil der server nie erlaubt, updates zu den Entitäten) dann handeln, als wenn der header nicht anwesend war, kann Sinn machen, dass die begrenzte Umstand.