【问题标题】:Microsoft Edge PDF inline issueMicrosoft Edge PDF 内联问题
【发布时间】:2015-09-04 06:42:57
【问题描述】:

我们的 Rails Web 应用程序使用 wkhtmltopdf 生成 PDF 并将它们发送到客户端。这适用于我们测试过的所有网络浏览器,除了 Edge。

我们尝试了几种不同的方式来呈现响应,最初是这样的:

kit = PDFKit.new(@html_content)
render text: kit.to_pdf, content_type: 'application/pdf'

这会打开 PDF 查看器,在我们测试的每个浏览器中都可以正确显示 PDF,但浏览器显示的 Edge 除外:某些东西导致此 PDF 无法打开。

在我们的应用程序日志中,有一个 POST 请求,它是表单提交,我可以看到我们的应用程序发送 pdf 文件响应,然后对表单提交 url 有后续 GET 请求,这是错误的,因为它不期望任何 GET 请求到那个网址。我不知道这里发生了什么。

请求的响应头是:

Cache-Control: max-age=0, private, must-revalidate
Connection: Keep-Alive
Content-Length: 34865
Content-Type: application/pdf; charset=utf-8
Date: Thu, 18 Jun 2015 14:35:30 GMT
Etag: "4baf297d1866339e60e8e893300909a0"
Server: WEBrick/1.3.1 (Ruby/2.0.0/2013-06-27)
Set-Cookie: _APP_session=<long cookie>; path=/; HttpOnly
X-Request-Id: 617580a8-4d7d-43c4-8e49-aeaeafba7b79
X-Runtime: 21.868098
X-XSS-Protection: 1; mode=block
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-ua-compatible: chrome=1

我也尝试过像这样使用send_data

send_data kit.to_pdf, type: 'application/pdf', disposition: 'inline'

这会导致以下响应标头但最终出现相同的问题:

Cache-Control: private
Connection: Keep-Alive
Content-Disposition: inline
Content-Length: 34866
Content-Transfer-Encoding: binary
Content-Type: application/pdf
Date: Thu, 18 Jun 2015 14:39:42 GMT
Etag: "11db49f1a26444a38fa2b51f3c3336ed"
Server: WEBrick/1.3.1 (Ruby/2.0.0/2013-06-27)
Set-Cookie: _APP_session=<long cookie>; path=/; HttpOnly
X-Request-Id: 501d9832-b07e-4764-8ecc-f1c1e9a6421e
X-Runtime: 7.054236
X-XSS-Protection: 1; mode=block
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-ua-compatible: chrome=1

如果我从上面删除 Content-Disposition: inline 标头,它会显示保存文件提示并且下载文件可以正常工作。不过,我们需要将其加载到浏览器窗口中。

我不认为它是 this question 的副本,因为它适用于 IE 9、10 和 11,并且只是 Edge 的问题。

【问题讨论】:

  • Generating PDF, error with IE and HTTPS 的可能重复项 // IE 在处理 PDF 时可能会对缓存标头感到讨厌。如果这些都不“正确”,那么它会在 显示 PDF 之前发出第二个请求(这就是您看到的 GET 请求)。首先尝试将Cache-Control 设置为public,如果仅此一项没有帮助,请同时查看该问题答案中的其他缓存标头。
  • Cache-Control: max-age=0, private, must-revalidate 肯定会在 IE 中中断——must-revalidate 使它发出第二个请求。
  • @CBroe 注意到我的第二个响应标头,这只有Cache-Control: private,这是必不可少的,因为数据非常敏感。另外,我不确定它是否可以与该问题重复,因为如前所述,此确切代码适用于 IE 9、10 和 11。
  • 至少试一试public ...
  • @CBroe 谢谢,非常正确。我尝试了public 并遇到了同样的问题。

标签: ruby-on-rails internet-explorer microsoft-edge


【解决方案1】:

对于我们在服务器上生成并内联发送的 PDF 报告,我们遇到了类似的问题 - 为查看器打开的新选项卡似乎重新发出了对内容的请求,而不是显示内容从响应。由于我们使用合成的一次性使用路径(主要是出于历史原因以确保获取新版本的报告),因此新标签的 GET 请求实际上并不存在该报告。

由于我们使用的是 20.10240,我不相信它实际上是在 10158 中修复的。

与 OP 一样,这似乎仅适用于“Content-Disposition: inline”;如果我们改用“附件”,则会在本地保存一个临时文件,并在查看器中打开该临时文件。

【讨论】:

    【解决方案2】:

    这是一个错误,但 Microsoft 已在 build 10158 中修复它! :)

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-19
    • 2022-10-07
    • 1970-01-01
    • 1970-01-01
    • 2023-01-03
    • 1970-01-01
    • 2017-01-27
    • 2017-04-12
    相关资源
    最近更新 更多