Ich kann anscheinend nicht genug Dokumentation finden. Ich habe eine App, die einige dynamische Antworten generiert, aber dennoch vom Last-Modified
Header profitieren kann - also sende ich sie.
Doch beim Drehen if_modified_since
(auf before
pro http://nginx.org/en/docs/http/ngx_http_core_module.html#if_modified_since ) scheint keinen Einfluss auf nicht-statischen Ressourcen zu haben. ZB PHP, Python Apps.
Liegt das daran, dass Nginx nicht nur meinen Last-Modified
Antwortheader betrachtet? Weil ich sehen kann, dass sie wie folgt richtig eingestellt zu sein scheinen:
> GET /3.0/view.json?id=2 HTTP/1.1
> Host: xxxxxxxxxxxxx
> Accept: */*
> If-Modified-Since: Sat, 02 May 2015 19:43:02 GMT
>
< HTTP/1.1 200 OK
* Server nginx/1.4.7 is not blacklisted
< Server: nginx/1.4.7
< Date: Fri, 01 May 2015 19:56:05 GMT
< Content-Type: application/json; charset=utf-8
< Transfer-Encoding: chunked
< Connection: keep-alive
< Vary: Accept-Encoding
< Last-Modified: Fri, 01 May 2015 19:56:05 GMT
Oder gibt es etwas Größeres, das ich übersehen habe? Nur neugierig, wie
if_modified_since
es umgesetzt wird, verglichen mit dem, wo ich meine Erwartungen setze. Ich nahm an, es würde nur die Antwort-Header betrachten und den Status nach Bedarf überschreiben. Liege ich falsch?
quelle
Antworten:
Das Senden von
Last-Modified
Headern in Ihren App-Antworten ist ein Anfang, aber es scheint, dass SieIf-Modified-Since
eingehende Anfragen nicht richtig bearbeiten , da Ihre App antworten sollte304 Not Modified
und nicht200 OK
. Das Ändern der Direktive für Nginx wirkt sich nur auf Anforderungen aus, die direkt von Nginx bereitgestellt werden, dh statische Ressourcen, es sei denn, Sie konfigurieren sie als Reverse-Proxy-Cache. In diesem Fall können Sie veraltete Antworten zu diesem Header-Wert bereitstellen, da Inhalte für einen bestimmten Zeitraum zwischengespeichert werden, ohne dass Ihre App beeinträchtigt wird. Beim Aktivieren<X>_cache_revalidate
wird derIf-Modified-Since
Header verwendet, um den Cache-Inhalt zwischen dem Cache von nginx und Ihrer App nach Ablauf erneut zu<X>
validieren (wobei = proxy / fastcgi / scgi / uwsgi).quelle
Changing the directive on nginx only impact requests served directly by nginx i.e. static ressources unless you configure it as a reverse proxy cache
. - Beispielsweise wirkt Nginx ohne zusätzliche Konfiguration nicht auf nicht statische Inhalte. VIELEN DANK!Da Sie in Nginx nichts über Ihre Cache-Konfiguration erwähnt haben, gehe ich davon aus, dass Sie keinen Cache festgelegt haben. Dies würde erklären, warum Ihr
If-Modified-Since
Header keine Auswirkungen auf dynamische Antworten hat.Wenn es um statische Ressourcen geht, hat Nginx eine sehr einfache Möglichkeit, die Handhabung zu bestimmen
If-Modified-Since
: Es vergleicht die Zeit im Feld mit der Zeit, zu der die Datei zuletzt geändert wurde. Kein Problem da.Wenn Sie möchten, dass Nginx dasselbe mit dynamisch generierten Antworten tut, gibt es nichts, mit dem es verglichen werden kann, es sei denn, Sie aktivieren das Caching. Standardmäßig merkt sich Nginx nicht an die Antworten, die es zugestellt hat. Wenn Sie das Caching aktivieren, kann Nginx eine eingehende Anforderung mit einer zuvor gegebenen Antwort vergleichen und somit verwenden
If-Modified-Since
.Ich fand diesen Artikel sehr nützlich, um die Details zum Einstellen eines Nginx-Caches zu erfahren.
quelle