IE 8 第一次不想要我的下载

IE 8 does not want my download at the first time

我有一个提供文件下载的 Zend Framework 2 应用程序。 下载操作如下所示

use Zend\Http;

[...]

public function sendDownload()
{
    $file = '/tmp/foo';
    if (!is_readable($file) || !is_file($file)) {
        throw new \Core\Mvc\Exception\NotFoundException(sprintf("File '%s' not found.", $file));
    }

    $baseName = 'foo.zip';

    $finfo = finfo_open(FILEINFO_MIME_TYPE);
    $mimeType = finfo_file($finfo, $file);
    finfo_close($finfo);

    $response = new Http\Response\Stream();
    $response->setStream(fopen($file, 'r'));
    $response->setStatusCode(200);

    $headers = new Http\Headers();
    $headers->addHeaderLine('Content-Type', $mimeType);
    $headers->addHeaderLine('Content-Disposition', 'attachment; filename="' . $baseName . '"');
    $headers->addHeaderLine('Content-Length', filesize($file));

    $response->setHeaders($headers);
    return $response;
}

当我在新的 Internet Explorer 8 会话中打开下载 link 时,下载失败。

"Text: xxxx can not be downloaded. The website is not available or could not be found. Try again later".

当我尝试在同一会话中再次打开 link 时,一切正常。

这是可重现的。我重新打开 IE - 下载 - 失败 - 再次 - 有效。

在其他浏览器中它可以工作。

在XDebug中检查动作时,执行的步骤是一样的。 在 apache 访问日志中,它两次都显示代码 200 - 但大小略有不同。

以前有人见过这样的行为吗?

我想我以前见过这个,但不记得确切的原因。我认为这是某些缓存 headers 和可能的 HTTPS 的某种组合?

尝试添加:

$headers->addHeaderLine('Cache-Control', 'private, must-revalidate');

另请参阅 Content-Disposition 内联是否可以替代附件。