Funktioniert Nginx `if_modified_since` nur mit statischen Ressourcen?

Funktioniert Nginx `if_modified_since` nur mit statischen Ressourcen?

Ich kann nicht findengenugDokumentation. Ich habe eine App, die einige dynamische Antworten generiert, aber dennoch vom Last-ModifiedHeader profitieren könnte – also sende ich ihn.

Das Einschalten if_modified_since(eingestellt auf before, prohttp://nginx.org/en/docs/http/ngx_http_core_module.html#if_modified_since) scheint keine Auswirkungen auf nicht statische Ressourcen zu haben. Z. B. PHP- und Python-Apps.

Liegt das daran, dass Nginx nicht nur meinen Antwortheader betrachtet Last-Modified? Denn ich kann sehen, dass sie anscheinend richtig eingestellt sind, wie unten:

> 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 übersehe ich etwas Größeres? Ich bin nur neugierig, wie if_modified_sincees im Vergleich zu meinen Erwartungen umgesetzt wird. Ich bin davon ausgegangen, dass es sich nur die Antwortheader ansieht und den Status bei Bedarf überschreibt. Liege ich falsch?

Antwort1

Das Senden von Headern in Ihren App-Antworten ist ein Anfang, aber es scheint, dass Sie eingehende Anfragen Last-Modifiednicht richtig verarbeiten, da Ihre App antworten und nicht antworten sollte . Das Ändern der Anweisung für nginx wirkt sich nur auf Anfragen aus, die direkt von nginx bedient werden, d. h. statische Ressourcen, es sei denn, Sie konfigurieren es als Reverse-Proxy-Cache. In diesem Fall können Sie veraltete Antworten bezüglich dieses Header-Werts liefern, da der Inhalt für einen bestimmten Zeitraum zwischengespeichert wird, ohne Ihre App zu erreichen. Wenn Sie dies aktivieren, wird der Header verwendet, um den Cache-Inhalt zwischen dem Cache von nginx und Ihrer App erneut zu validieren, sobald er abgelaufen ist (wobei = Proxy / FastCGI / SCGI / UWSGI).If-Modified-Since304 Not Modified200 OK<X>_cache_revalidateIf-Modified-Since<X>

Antwort2

Da Sie nichts zu Ihrer Cache-Konfiguration in Nginx erwähnt haben, gehe ich davon aus, dass Sie keinen Cache eingerichtet haben, und dies würde erklären, warum Ihr If-Modified-SinceHeader bei dynamischen Antworten keine Wirkung hat.

Wenn es um statische Ressourcen geht, kann Nginx ganz einfach bestimmen, wie mit umzugehen ist If-Modified-Since: Es vergleicht die Zeit im Feld mit der Zeit, zu der die Datei zuletzt geändert wurde. Kein Problem.

Wenn Sie möchten, dass Nginx dasselbe mit dynamisch generierten Antworten macht, gibt es keinen Vergleich,es sei denn, Sie aktivieren die Zwischenspeicherung.Standardmäßig merkt sich Nginx die Antworten, die es geliefert hat, nicht. Wenn Sie das Caching aktivieren, kann Nginx eine eingehende Anfrage mit einer zuvor gegebenen Antwort vergleichen und hat so die Möglichkeit, zu verwenden If-Modified-Since.

Ich habe gefundenDieser Artikelwirklich nützlich, um die Feinheiten des Einrichtens eines Nginx-Cache zu erlernen.

verwandte Informationen