Microsoft Edge PDF 内联问题
Microsoft Edge PDF inline issue
我们的 Rails 网络应用程序使用 wkhtmltopdf 生成 PDF 并将它们发送给客户端。这适用于我们测试过的所有网络浏览器,Edge 除外。
我们已经尝试以几种不同的方式呈现响应,原来是这样的:
kit = PDFKit.new(@html_content)
render text: kit.to_pdf, content_type: 'application/pdf'
这将打开 PDF 查看器,PDF 在我们测试过的每个浏览器中都能正确显示,但浏览器显示的 Edge 除外:某些原因阻止此 PDF 打开。
在我们的应用程序日志中,有一个 POST 请求,这是表单提交,我可以看到我们的应用程序发送了 pdf 文件响应,然后有后续的 GET 请求到表单提交 url 哪个错误是因为它不期望对 url 的任何 GET 请求。我不知道这里发生了什么。
请求的响应 header 是:
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'
这会导致以下响应 headers 但最终还是同样的问题:
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
header 它会弹出保存文件提示并且下载文件工作正常。不过,我们需要它在浏览器中加载 window。
我不认为它是 this question 的副本,因为它在 IE 9、10 和 11 中工作,只是 Edge 的问题。
这是一个错误,但 Microsoft 已在版本 10158 中修复它! :)
我们在服务器上生成并联机发送的 PDF 报告似乎遇到了同样的问题 - 为查看者打开的新选项卡似乎重新发出了内容请求,而不是显示响应中的内容。由于我们使用合成的一次性使用路径(主要是出于历史原因以确保获取新版本的报告),该报告实际上并不存在于新选项卡的 GET 请求中。
由于我们使用的是 20.10240,我不相信它实际上已在 10158 中修复。
与 OP 一样,这似乎仅适用于 "Content-Disposition: inline";如果我们改用 "attachment",则会在本地保存一个临时文件,并在查看器中打开该临时文件。
我们的 Rails 网络应用程序使用 wkhtmltopdf 生成 PDF 并将它们发送给客户端。这适用于我们测试过的所有网络浏览器,Edge 除外。
我们已经尝试以几种不同的方式呈现响应,原来是这样的:
kit = PDFKit.new(@html_content)
render text: kit.to_pdf, content_type: 'application/pdf'
这将打开 PDF 查看器,PDF 在我们测试过的每个浏览器中都能正确显示,但浏览器显示的 Edge 除外:某些原因阻止此 PDF 打开。
在我们的应用程序日志中,有一个 POST 请求,这是表单提交,我可以看到我们的应用程序发送了 pdf 文件响应,然后有后续的 GET 请求到表单提交 url 哪个错误是因为它不期望对 url 的任何 GET 请求。我不知道这里发生了什么。
请求的响应 header 是:
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'
这会导致以下响应 headers 但最终还是同样的问题:
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
header 它会弹出保存文件提示并且下载文件工作正常。不过,我们需要它在浏览器中加载 window。
我不认为它是 this question 的副本,因为它在 IE 9、10 和 11 中工作,只是 Edge 的问题。
这是一个错误,但 Microsoft 已在版本 10158 中修复它! :)
我们在服务器上生成并联机发送的 PDF 报告似乎遇到了同样的问题 - 为查看者打开的新选项卡似乎重新发出了内容请求,而不是显示响应中的内容。由于我们使用合成的一次性使用路径(主要是出于历史原因以确保获取新版本的报告),该报告实际上并不存在于新选项卡的 GET 请求中。
由于我们使用的是 20.10240,我不相信它实际上已在 10158 中修复。
与 OP 一样,这似乎仅适用于 "Content-Disposition: inline";如果我们改用 "attachment",则会在本地保存一个临时文件,并在查看器中打开该临时文件。