下载PDF时Chrome会发送两个请求(并取消其中一个)

时间:2015-09-22 19:49:49

标签: google-chrome pdf

我注意到,每当您在Chrome中下载PDF时,它始终会发出两个请求,然后取消其中一个请求。这导致请求在我的Web应用程序中注册了两次,这是不需要的。有没有办法让Chrome只提出一个PDF请求?

我现在已经研究过这个话题了,我还没有找到足够的答案。与密切相关的答案表明问题在于Chrome正在寻找一个图标,但网络标签显示它实际上是两次发出相同的请求,然后取消第二个请求。

有没有办法阻止Chrome发出第二个请求?

以下是我通过Google找到的随机PDF文件的链接,点击后该文件会演示该行为。我会在devtools中发布我的网络选项卡的图片,但这是我在Stack Overflow上的第一篇文章,该网站禁止我上传图片。

https://www.adobe.com/enterprise/accessibility/pdfs/acro6_pg_ue.pdf

5 个答案:

答案 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 准备好之前初始化滚动条后,问题解决了。