【问题标题】:How to force nginx to include Content-Length header on HEAD requests如何强制 nginx 在 HEAD 请求中包含 Content-Length 标头
【发布时间】:2016-08-23 13:54:03
【问题描述】:

如何配置 nginx 在响应 HTTP HEAD 请求时返回有效的 Content-Length 标头?目前我的服务器返回这个:

curl --head http://example.com/myfile.xml
HTTP/1.1 200 OK
Date: Tue, 23 Aug 2016 13:49:46 GMT
Content-Type: text/xml
Set-Cookie: __cfduid=da2daeaa59809916192f7ac0645d3a3e91471960186; expires=Wed, 23-Aug-17 13:49:46 GMT; path=/; domain=.example.com; HttpOnly
Last-Modified: Mon, 22 Aug 2016 16:20:26 GMT
Vary: Accept-Encoding
ETag: W/"57bb264a-5442b26a"
Expires: Thu, 31 Dec 2037 23:55:55 GMT
Cache-Control: max-age=315360000
Access-Control-Allow-Origin: *
Access-Control-Request-Method: *
Cache-Control: public
Server: cloudflare-nginx
CF-RAY: 9dac40-LHR
X-Cache: MISS from Squid
Via: 1.1 Squid (squid/3.2.14)

必须将带有响应的Content-Length 标头发送到HEAD(如果我不这样做,检查该 URL 的服务将永远不会看到文件已更改,并且不会下载新版本)。你是怎么设置的?

【问题讨论】:

  • 你能发布你的 ngnix 配置吗?我所有使用 nginx(具有非常基本的配置)的服务器都在 HEAD 请求中返回 Content-length。

标签: ruby-on-rails linux http nginx


【解决方案1】:

我可能错了,但由于 Rails 应用服务器生成的动态内容的性质,nginx 可能没有显示内容长度。 你可以让 Rails 在响应头中发送它。在 Rails 应用程序的 config/application.rb 中添加以下中间件:

config.middleware.use "Rack::ContentLength"

这应该返回 content-length 标头作为响应。

【讨论】:

  • 谢谢...但是当 nginx 在 Rails 请求周期之外直接提供文件时呢?该文件是在 rake 任务中离线生成的。
  • 在这种情况下,我总是在我的 HEAD 请求中获取 content-length 标头。我请求了公共图像(由 nginx 提供,而不是由 rails 提供)curl --head http://myserver.com/images/image.png
猜你喜欢
  • 2011-04-20
  • 2018-04-06
  • 1970-01-01
  • 2019-11-21
  • 2010-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多