Http headers 如何让浏览器在不更改文件名/扩展名的情况下下载文件?

Http headers 如何让浏览器在不更改文件名/扩展名的情况下下载文件?,http-headers,download,content-type,file-extension,content-disposition,Http Headers,Download,Content Type,File Extension,Content Disposition,问题:是否可以在浏览器不更改文件名的情况下将文件从web浏览器下载到用户的机器上 背景:我有一个共享软件应用程序,用户可以购买许可证来激活它。许可证是一个XML文件,但扩展名是“.mlic”,而不是“.XML”。mlic是我的应用程序识别的特殊文件扩展名。用户付费后,他们将被重定向到我的PHP脚本,该脚本将推送mlic文件和相关的HTTP头。我的剧本在下面 问题:有些人告诉我文件下载为license.xml或license.mlic.xml,他们不知道如何处理这个文件。我不知道这些人在用什么浏览

问题:是否可以在浏览器不更改文件名的情况下将文件从web浏览器下载到用户的机器上

背景:我有一个共享软件应用程序,用户可以购买许可证来激活它。许可证是一个XML文件,但扩展名是“.mlic”,而不是“.XML”。mlic是我的应用程序识别的特殊文件扩展名。用户付费后,他们将被重定向到我的PHP脚本,该脚本将推送mlic文件和相关的HTTP头。我的剧本在下面

问题:有些人告诉我文件下载为license.xml或license.mlic.xml,他们不知道如何处理这个文件。我不知道这些人在用什么浏览器或操作系统。我无法复制。我的应用程序是Mac版的,所以这将适用于OS X

解决方案:对此有什么办法吗?是否有明确指定文件扩展名的HTTP头

header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"license.mlic\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . $filesize($input_path));

ob_end_flush();
@readfile($input_path);
1) 删除无用/未定义的标题字段,例如内容传输编码和内容描述


2) 不,您不能阻止浏览器根据检测到的内容类型调整扩展

存在明确指定文件扩展名的http头。为此,u应将内容类型设置为,例如,对于pdf文件为“application/pdf”,对于excel文件为“application/ms excel”