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

我注意到,无论何时您使用chrome下载PDF,它都会一直提出两个请求,而其中一个请求是正确的。 这导致请求在我的Web应用程序中注册了两次,这是不需要的。 有没有办法让Chrome只提出一个PDF请求?

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

有没有办法阻止Chrome提出第二次请求?

以下是我通过Google找到的一个随机PDF文件的链接,点击时应显示该行为。 我会在devtools上张贴我的网络标签的图片,但这是我在stackoverflow上的第一篇文章,并且该网站禁止我上传图片。

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


它看起来像Chrome中的一个错误:https://bugs.chromium.org/p/chromium/issues/detail?id = 587709

问题在于,Chrome在加载返回PDF流的iframe时,会在该iframe中写入一个“嵌入”标记,该标记又包含与iframe相同的网址。 这会再次触发对该网址的请求,但Chrome立即取消该网址。 (请参阅网络选项卡)但到那时,损坏已完成。

我们在这里有同样的问题,并且不会在Firefox或IE中出现。

我们仍在寻找解决这个问题的好方法。


我仍然试图找到一个适当的解决方案,但作为一个部分“修复”,现在你可以有两种选择

1)将内容配置设置为标题中的“附件”

设置为“内联”会导致Chrome运行第二次取消的呼叫

所以例如你可以做这样的事情(例如nodejs)

res.writeHead(200, {
    'Content-Type' : 'application/pdf',
    'Access-Control-Allow-Origin' : '*',
    'Content-Disposition' : 'attachment; filename=print.pdf'
});

不幸的是,这个解决方案将迫使浏览器直接下载PDF,而不是将其内联呈现,这不是可能的

2)在标题中添加“过期”这个解决方案将总是触发第二次取消的呼叫,但它被服务器忽略

所以例如你可以做这样的事情(例如nodejs)

res.writeHead(200, {
    'Content-Type' : 'application/pdf',
    'Access-Control-Allow-Origin' : '*',
    'Content-Disposition' : 'inline; filename=print.pdf',
    'Expires' : new Date(new Date().getTime() + (60000))
});

我在iframe中遇到了同样的问题。 我转过PDF Viewer扩展程序,问题消失。 我在考虑扩展程序下载文件两次。 第一次获得大小,第二次下载一个进度条(使用第一个请求中收集的大小)

链接地址: http://www.djcxy.com/p/6207.html

上一篇: Chrome sends two requests when downloading a PDF (and cancels one of them)

下一篇: EMBED vs. OBJECT