AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 687054
Accepted
anonymous coward
anonymous coward
Asked: 2015-05-02 12:20:09 +0800 CST2015-05-02 12:20:09 +0800 CST 2015-05-02 12:20:09 +0800 CST

Nginx `if_modified_since` 是否仅适用于静态资源?

  • 772

我似乎找不到足够的文档。我有一个应用程序可以生成一些动态响应,但仍然可以从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实施,与我设定期望的地方相比。我假设它只会查看响应标头,并根据需要覆盖状态。我错了吗?

nginx
  • 2 2 个回答
  • 9370 Views

2 个回答

  • Voted
  1. Best Answer
    Xavier Lucas
    2015-05-02T22:04:18+08:002015-05-02T22:04:18+08:00

    在您的应用回复中发送Last-Modified标头是一个开始,但您似乎没有If-Modified-Since正确处理传入的请求,因为您的应用应该回复304 Not Modified而不是回复200 OK。更改 nginx 上的指令只会影响 nginx 直接服务的请求,即静态资源,除非您将其配置为反向代理缓存。在这种情况下,您可能会针对此标头值提供过时的回复,因为内容将被缓存一段时间而不会影响您的应用。<X>_cache_revalidate启用后,将使用If-Modified-Since标头重新验证 nginx 缓存和您的应用程序之间的缓存内容(其中<X>= proxy / fastcgi / scgi / uwsgi )

    • 5
  2. Louis
    2015-05-02T15:58:18+08:002015-05-02T15:58:18+08:00

    由于您没有提及有关 Nginx 中缓存配置的任何内容,我将假设您没有设置缓存,这将解释为什么您的If-Modified-Since标头对动态响应没有影响。

    对于静态资源,Nginx 有一个非常简单的方法来确定如何处理If-Modified-Since:它将字段中的时间与文件上次修改的时间进行比较。那里没问题。

    当您希望 Nginx 对动态生成的响应执行相同操作时,除非您打开缓存,否则没有什么可以与之比较的。默认情况下,Nginx 不会记住它提供的响应。当你打开缓存时,Nginx 可以将传入的请求与之前给出的响应进行比较,因此可以使用If-Modified-Since.

    我发现这篇文章对于学习设置 Nginx 缓存的细节非常有用。

    • 0

相关问题

  • Gzip 与反向代理缓存

  • nginx 作为代理的行为

  • Nginx 学习资源 [关闭]

  • 提供 70,000 个静态文件 (jpg) 的最佳方式?

  • 在 Apache、LightTPD 和 Nginx Web 服务器上提供 PHP 5.x 应用程序的现状?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve