Answers:
从服务器端看,绝对有 “传输以在浏览器窗口中查看”和“下载以存储”之间没有技术上的区别。
也许服务器将提供(较小)预览和(较大)真实图像供下载,并且可以区分已访问的图像。但是它只能注册(并记录)对这些文件的访问,请求来自的IP地址,浏览器软件的通用“ id字符串”,而不是客户端的意图。
但是文件访问并不总是由于与客户端计算机的人为交互而导致的。一方面,即使您甚至不使用“将图像另存为...”,浏览器也会在您的系统上存储图像和其他网站数据。另一方面,许多浏览器甚至“跟随链接”(即:下载内容!)提前来加快导航速度。即使您从未故意访问过这些文件,浏览器缓存甚至可能会以这种方式进入您的本地备份!
最后,根据您使用的浏览器的实现,使用“另存为”并取消(不选择目标文件名)可能会或可能不会启动下载。
curl https://www.google.com/ -H 'User-Agent: I am really a web browser, trust me' >> /dev/null
;)
由于我不太熟悉该主题,因此我对“服务器”的使用仅涵盖可能记录/监视/保存所述活动的任何实体。
虽然HTTP服务器没有看到已取消的下载,但是页面上可能存在Javascript代码来监视此类事件。
Javascript具有事件处理程序,可用于检测图像的右键单击,并且很有可能可以监视其他鼠标的移动,以猜测您从弹出菜单中做出的选择。之后,脚本可以轻松地将信息立即发送到服务器,或将其存储在本地浏览器存储中,然后再发送。
在Google Image搜索的特定情况下,该页面上的JavaScript确实有多个处理程序来监听鼠标事件。但是,代码被混淆了,因此要区分它执行哪种监视并不容易。
HEAD
HTTP请求而不是GET
。
这取决于服务器。
开始下载时,服务器将能够进行注册(考虑一下,它必须知道,因为它会建议一个名称)。
服务器还可以跟踪传输了多少字节以及连接是否/何时关闭,这可以显示diwnload是否完成。
还有其他可能性,例如恢复下载和多线程下载-但是服务器仍然可以知道并记录所有这些信息。
请注意,在右键单击并下载图像的特定情况下,由于客户端缓存,下载可能根本不会注册为下载。
Content-Disposition: attachment; filename="…"
以便浏览器显示下载提示,那么即使取消下载,服务器也将知道该请求-甚至可能区分下载已中止。
远程服务器不应注意到任何下载活动,因为尚未开始下载。
但是,远程服务器知道您已经下载了该图像以便在浏览器中显示它...并且副本将在您的浏览器缓存中...
任何直接监视本地计算机的“实体”都可以记录有关该活动的信息。
Content-Disposition
标头将包含实际的文件名。
Content-Disposition
标头覆盖(已经多次提到),这意味着必须首先发出请求。此外,在选择目标目录之前,浏览器可以并且确实开始下载有效内容。