我似乎无法找到足够的文档.我有一个应用程序,可以生成一些动态响应,但仍然可以从Last-Modified标头中受益 – 所以我发送它.
但是,启用if_modified_since(设置为之前,每个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,与我设定期望的地方相比.我假设它只会查看响应标头,并根据需要覆盖状态.我错了吗?
最佳答案
在应用程序回复中发送Last-Modified标头是一个开始,但似乎您没有正确处理If-Modified-Since传入请求因为您的应用程序应回复304 Not Modified而不是200 OK.更改Nginx上的指令仅影响由Nginx直接提供的请求,即静态资源,除非您将其配置为反向代理缓存.在这种情况下,您可以提供有关此标头值的陈旧回复,因为内容将缓存一段时间而不会访问您的应用.车削< X> _cache_revalidate上将使用了If-Modified-Since标题重新验证Nginx的缓存和应用程式之间的高速缓存内容,一旦它已经期满(其中,< X> =代理/ fastcgi的/ SCGI / uwsgi)