我注意到,每当您在Chrome中下载PDF时,它始终会发出两个请求,然后取消其中一个请求。这导致请求在我的Web应用程序中注册了两次,这是不需要的。有没有办法让Chrome只提出一个PDF请求?
我现在已经研究过这个话题了,我还没有找到足够的答案。与密切相关的答案表明问题在于Chrome正在寻找一个图标,但网络标签显示它实际上是两次发出相同的请求,然后取消第二个请求。
有没有办法阻止Chrome发出第二个请求?
以下是我通过Google找到的随机PDF文件的链接,点击后该文件会演示该行为。我会在devtools中发布我的网络选项卡的图片,但这是我在Stack Overflow上的第一篇文章,该网站禁止我上传图片。
https://www.adobe.com/enterprise/accessibility/pdfs/acro6_pg_ue.pdf
答案 0 :(得分:11)
它看起来像是Chrome中的一个错误:https://bugs.chromium.org/p/chromium/issues/detail?id=587709
问题是Chrome在加载返回PDF流的iframe时会在iframe中写入一个“embed”标记,该标记再次包含与iframe相同的网址。这会再次触发对该网址的请求,但Chrome会立即取消该网址。 (参见网络标签) 但到那时,损害已经完成。
我们在这里遇到同样的问题,并且在Firefox或IE中都没有。
我们仍然在寻找解决这个问题的好方法。
答案 1 :(得分:0)
我仍然试图找到一个合适的解决方案,但作为一个部分"修复"现在你可以有两个选择
1)将内容处置设置为" attachment"在标题中
将其设置为" inline"导致chrome运行第二次取消的呼叫
所以例如你可以做类似的事情(示例中为nodejs resp)
res.writeHead(200, {
'Content-Type' : 'application/pdf',
'Access-Control-Allow-Origin' : '*',
'Content-Disposition' : 'attachment; filename=print.pdf'
});
不幸的是,这个解决方案将迫使浏览器立即下载pdf,而不是将其内联呈现,而且这可能不是很令人沮丧
2)添加"到期"在标题中 此解决方案将始终触发第二个已取消的呼叫,但服务器忽略该呼叫
所以例如你可以做类似的事情(示例中为nodejs resp)
res.writeHead(200, {
'Content-Type' : 'application/pdf',
'Access-Control-Allow-Origin' : '*',
'Content-Disposition' : 'inline; filename=print.pdf',
'Expires' : new Date(new Date().getTime() + (60000))
});
答案 2 :(得分:0)
我在iframe中遇到了同样的问题。我打开了PDF Viewer扩展程序,问题就消失了。我在想扩展程序两次下载文件。第一次获取大小,第二次使用进度条下载(使用第一次请求中收集的大小)
答案 3 :(得分:0)
我尝试了其他解决方案,但没有一个对我有用,我知道的有点晚了,但只是为了记录,我通过以下方式解决了这个问题:
添加下载属性:
就我而言,我使用的是表单,所以它是这样的:
<form action="/package.zip" method="POST" download>
这适用于 Brave 和 Safari,它们之前也出现过同样的问题,我认为它适用于 Chrome。
答案 4 :(得分:0)
就我而言,问题与浏览器无关。我注意到我们的滚动条插件的 (OverlayScrollbars) DOM 操作会由于插件的构造或销毁事件重新加载嵌入的 pdf 数据并多次调用控制器。在 DOM 准备好之前初始化滚动条后,问题解决了。