1

这已经让我失望了太久了..

下面发布的是我们的 Rails 3 控制器。

  1. 首次尝试使用 Internet Explorer 访问时,下载提示失败并显示“无法下载”消息。

  2. 当尝试立即访问相同的 URL 时,下载提示成功。

  3. 在任何情况下,Cache-Control 标头都没有正确发送。我们为 Rack Response 提供了一个特定的值,但 Cache-Control 总是作为“Cache-Control: no-cache”返回。但是,提供的其他标头值正在正确发送。这可能是一个单独的问题,但无论如何都会让我失望。

下面的示例模拟了我们的实际系统如何处理客户数据。CSV 启动并流式传输到客户端。下载是渐进的,以避免在 CSV 生成完成时等待很长时间。这些文件可能超过 20-30mb,因此在下载开始前等待几分钟是不可取的。

这似乎适用于所有其他浏览器(firefox、safari 等)。

class StreamingController < ApplicationController

  def index
    respond_to do |wants|
      wants.csv {
        filename = "testing_filename#{DateTime.now}.csv"

        headers.merge!({
          'Cache-Control'             => 'must-revalidate, post-check=0, pre-check=0',
          'Content-Type'              => 'text/csv',
          'Content-Disposition'       => "attachment; filename=\"#{filename}\"",
          'Content-Transfer-Encoding' => 'binary'
        })

        responder = Rack::Response.new([], 200, headers) do |response|
          response.finish do |r|
            100000.times do |t|
              r.write(t)
            end
          end
        end

        self.response_body = responder
      }
    end
  end
end
4

1 回答 1

2

此问题可能与http://support.microsoft.com/kb/316431有关- 尝试在标题“Cache-Control”中省略“must-validate”并查看它是否有效。如果不尝试完全省略标题。对于正在发送的“无缓存”部分,请求是否可能通过正在添加它的代理?

斯文

于 2010-10-18T16:51:56.190 回答