我看到 this plugin 使用Ajax 下载文件和其他一些后备技术。
但由于所有浏览器都不支持ajax下载文件功能,因此他使用了iframe技巧。 (这很容易实现)
但有一件事引起了我的注意:
他还添加了一个选项,告诉您文件何时完成 下载。
他是通过cookie
完成的。他通过cookie
来查看setInterval
是否cookie
。只要cookie
不存在 - 文件就没有完成下载。(当Content-Disposition: attachment; filename=Report0.pdf
存在时 - 文件已下载)
因此下载文件的标题是:
Set-Cookie: fileDownload=true; path=/
他补充道:
set-cookie
但后来我想 - 谁说content-disposition:attachment;filename=1.jpg
在文件完成下载后被称为?
问题:
查看实际标题:
1 - 浏览器是否根据实际的出现顺序消化每个标头?
2 - 是否有任何标题必须之前出现在其他标题中?
3 - 每个标题的摘要 - 阻止摘要直到当前的hedare摘要完成?我的意思是:行filename=1.jpg
阻止浏览器消化下一个标题 - 直到{{1}}完成加载?
nb
我也试过通过提琴手调查它,但我没有得到任何结论。(我的意思是如何在小提琴手中测试它?)
答案 0 :(得分:2)
你是对此持怀疑态度。
没有要求客户端等到响应主体完成后才能评估正文之前的Set-Cookie
标题,并且实际上有充分的理由相信大多数浏览器会在正文完成之前设置cookie (因为许多网页会在HTML页面的JavaScript中查看document.cookie
)。
事实上,我测试了这个(使用你可以在这里看到的MeddlerScript:http://pastebin.com/SUwCFyxS)并且发现IE,Chrome和Firefox都在下载完成之前设置了cookie,并且即使用户点击也设置了cookie下载时“取消”。
HTTP规范包含Trailer
(在响应主体之后出现的标头)的概念,但这些很少使用,并且在许多客户端(例如WinINET / IE)中不受支持。如果客户端 支持预告片,则服务器可以在主体之后发送Set-Cookie标头,这意味着客户端在完成下载之前无法看到它。