Nginx 'if_modified_since' только работает над статическими ресурсами?

Я, может казаться, не нахожу достаточно документации. У меня есть приложение, которое генерирует некоторые динамические ответы, но могло все еще извлечь выгоду из Last-Modified заголовок - таким образом, я отправляю его.

Однако включение if_modified_since (набор к before, на http://nginx.org/en/docs/http/ngx_http_core_module.html#if_modified_since), кажется, не имеет эффекта на нестатические ресурсы. Например, php, приложения Python.

Это, потому что Nginx только смотрит на мой ответ Last-Modified заголовок? Поскольку я вижу, что они, кажется, установлены правильно, как указано ниже:

> 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

Или есть ли что-то большее, которое я пропускаю? Просто любопытный, как if_modified_since реализован, сравнен туда, где я устанавливаю свои ожидания. Я предположил, что это просто посмотрит на заголовки ответа и переопределит состояние по мере необходимости.Я неправ?

7
задан 2 May 2015 в 09:10
2 ответа

在应用程序回复中发送 Last-Modified 标头是一个开始,但看来您输入时无法正确处理 If-Modified-Since 请求,因为您的应用应回复 304未修改,而不是 200 OK 。 更改nginx上的指令仅会影响直接由nginx服务的请求,即静态资源,除非您将其配置为反向代理缓存。 在这种情况下,您可以提供有关此标头值的陈旧答复,因为内容将被缓存一段时间,而不会影响您的应用程序。 启用 _cache_revalidate 将使用 If-Modified-从标头可以在过期后重新验证nginx的缓存和您的应用之间的缓存内容(其中 =代理/ fastcgi / scgi / uwsgi)

5
ответ дан 2 December 2019 в 23:42

Поскольку вы ничего не упомянули о конфигурации своего кеша в Nginx, я предполагаю, что вы не устанавливали кеш, и это объясняет, почему ваш If-Modified-Since Заголовок не влияет на динамические ответы.

Когда дело доходит до статических ресурсов, у Nginx есть действительно простой способ определить, как обрабатывать If-Modified-Since : он сравнивает время в поле с временем последнего изменения файла. Нет проблем.

Если вы хотите, чтобы Nginx делал то же самое с динамически генерируемыми ответами, ему не с чем сравнивать, , если вы не включите кеширование. По умолчанию Nginx не запоминает отправленные им ответы. Когда вы включаете кеширование, Nginx может сравнивать входящий запрос с ранее полученным ответом и, таким образом, может использовать If-Modified-Since .

Я нашел эта статья действительно полезна, чтобы изучить более тонкие детали настройки кеша Nginx.

0
ответ дан 2 December 2019 в 23:42

Теги

Похожие вопросы