7
votes

Comportement correct avec si-match l'en-tête?

Selon RFC 2616 , génération d'étiquettes d'entité par les serveurs HTTP est facultative. Cependant, je n'ai pas pu trouver ce que le serveur HTTP Conditionnellement Conditionnellement devrait faire s'il reçoit un si-match (ou si-aucun-match ) entête. Devrait-il simplement ignorer ces en-têtes ou doit-il répondre avec 412 a échoué ?

UPD: juste pour clarifier, je suppose que le serveur en question ne prend pas en charge les étiquettes d'entité.


1 commentaires

C'est une question étrange, car Etag est un en-tête de réponse qui vient du serveur. Si le client n'a pas reçu la valeur Etag du serveur (car elle ne prend pas en charge Etags), alors où l'a-t-il obtenu et pourquoi l'envoyait-il à ce serveur?


3 Réponses :


2
votes

Bien que le RFC2616 soit implicite sur la matière, vous pouvez en déduire de, par exemple 14,26 (si aucun match), que si le serveur ne peut pas correspondre à la ressource avec la balise, elle devrait ensuite aller de l'avant sur demande). Le code 412, basé sur ma compréhension de la RFC2616, est destiné aux demandes qui modifient l'état (par exemple, POST, POST, Supprimer). Donc, dans l'essence, si la balise ne correspond pas (et quand elle est absente sur le côté serveur n'est qu'un des nombreux scénarios possibles), le serveur devrait ensuite aller de l'avant avec la demande.


2 commentaires

Cela devrait aller de l'avant dans l'affaire INM, mais il faut 412 pour un match IF (comme l'indique Eric ci-dessous).


Oui, ça a du sens. Merci Mark.



9
votes

Contrairement à un en-tête IF-Aucun correspondant (ignorance dont l'ignorance ne nuit que la performance), une demande IF-Match doit presque certainement échouer et renvoyer un http / 412 si le serveur ne peut pas correspondre à l'entité demandée. Probablement l'utilisation la plus courante de l'en-tête IF-MATOR est lorsque le client effectue une demande de plage, et à moins que le serveur puisse confirmer que la ressource n'a pas été modifiée, elle ne doit pas renvoyer la plage demandée car le résultat pourrait être une corruption des données sur le client.

Maintenant, si le serveur sait que ce n'est pas une demande de plage ou sait que l'entité client doit, par exemple, la correspondance (par exemple, parce que le serveur ne permet jamais des mises à jour de ses entités), puis agissant comme si l'en-tête n'était pas présent peut faire sens dans cette circonstance limitée.


0 commentaires

8
votes

Il y a une pratique code de réponse HTTP Diagramme d'activité que vous peut utiliser pour répondre à cette question.

Si vous ne prenez pas en charge Etag < / a> et la demande contient un if-match valeur autre que * , vous répondriez avec un 412. et si-aucun-match avec des valeurs autres que * peut être complètement ignoré.


1 commentaires