salutations, p>
Comment puis-je éteindre Etag (s) etag (s) dans Ruby sur Rails V2.3.5 P>
Lorsque je fais une demande directe à la ROR / MONGREL, un en-tête Etag est présent. P>
TIA, P>
-Daniel p>
6 Réponses :
Je ne pense pas qu'ils sont sur défaut. p>
Ma compréhension est qu'elles doivent être explicitement définies à l'aide de Stale? / Fresh_Qui appelle ou similaire. P>
J'ai vérifié le contrôleur, il n'y a pas de code GET conditionnel. -Daniel
Il y a un Etag code>
Setter Méthode sur l'objet ActionController :: Réponse CODE> Objet, qui supprime l'en-tête HTTP Etag si elle est vide, vous devriez donc être capable de l'effacer dans votre contrôleur (probablement dans un filtre avant):
response.etag = nil
Oui, mais j'ai besoin de le faire pour toutes les réponses, alors que je pouvais le faire pour chaque contrôleur, qui deviendrait fastidieux après un certain temps et que vous soyez une erreur sujette. Et si quelqu'un a raté un?
Pourquoi ne pas ajouter un avant_filter dans votre contrôleur d'application qui définit etag à nil? p>
Je préférerais ne pas avoir à ajuster quelque plus de 30 contrôleurs plus de 30+ et à vous assurer que tout le monde la définit à l'avenir. :)
Si vous mettez l'avant_filter dans votre application_Controller, il est exécuté pour tous les contrôleurs, et si, pour une raison quelconque, vous avez un contrôleur qui doit générer des eTags, il suffit d'utiliser skip_be_filter.
Mettre en place La solution de contournement appropriée pour désactiver l'utilisation et la génération d'Etag (et permet de consigner les dépenses de temps dans MD5). Ce singe PATCH: P> réponse.etag = nil code> dans un fichier avant_filter ne fonctionne pas. L'Etag est généré juste avant que la réponse soit envoyée (elle est calculée à partir du corps de manière à ce que tout le rendu a été effectué).
module ActionController
class Request
# never match any incomming etag
def etag_matches?(etag)
false
end
end
class Response
# fake rails that our response already has an etag set and so none is generated automatically
def etag?
true
end
end
end
beaucoup plus facile:
Cela fonctionne-t-il pour les rails 2.3 (comme demandé par l'OP), ou c'est des rails-3 seulement?
C'était potentiellement la réponse la plus utile que j'ai vue à ce sujet.
Je travaille dans des rails 4 sur Webrick, essayant de répondre au cache jusqu'à ce qu'il expire à une heure précise chaque jour. On dirait que l'ETAG généré automatiquement interfère avec le cache d'expiration qui est pourquoi j'ai recherché cette réponse. Je n'ai rien trouvé utile ici, mais je résolvai mon problème, je vais donc partager.
TL; DR Définit le mais défini à quoi? Dans ma situation, j'essayais d'optimiser un service Web qui a renvoyé les résultats d'un processus qui fonctionne à la fois tous les jours. Mes en-têtes de réponse ont fini par ressembler à ceci: p> Vous voulez d'abord écrire explicitement l'en-tête CODE> Cache-Control CODE> pour écraser la défaillance de la valeur par défaut. Je fixe la mienne à 24 heures pour coïncider avec le maximum de mon en-tête d'expiration. J'ai défini l'en-tête d'expiration avec une fonction qui ressemble à ceci comme suit: p> la fonction getlastmodifié em> fonctionne exactement 24 heures de moins que le getcachetime em> fonction. Il semble que cela puisse définir cela supprimera l'ETAG (un autre en-tête de mise en cache de validation) au moins dans mon environnement de développement actuel. P> P> Dernier modifié P> P>