【发布时间】:2011-08-05 18:30:45
【问题描述】:
我的 HTML 页面包含带有指向 PDF 文件的 href 的 标签。我的 Apache Web 服务器很好地为它们提供服务,但标题(如浏览器历史记录中所示)是文件名。我希望能够设置该标题。
也许有一个可以设置的标题?
我不想编写脚本来提供文件,因为服务器可以处理 Content-Encoding 协商(例如,gzip),并进行流控制,我不想重新创建这些。
【问题讨论】:
标签: apache http-headers
我的 HTML 页面包含带有指向 PDF 文件的 href 的 标签。我的 Apache Web 服务器很好地为它们提供服务,但标题(如浏览器历史记录中所示)是文件名。我希望能够设置该标题。
也许有一个可以设置的标题?
我不想编写脚本来提供文件,因为服务器可以处理 Content-Encoding 协商(例如,gzip),并进行流控制,我不想重新创建这些。
【问题讨论】:
标签: apache http-headers
这是一个你可以设置的http头。
Content-Disposition:inline; filename="*File name you want*";
【讨论】:
我怀疑您遇到的问题是客户端浏览器将文件名存储在历史记录中,您无法修复。
上次我查了一下,历史中的标题来自于HTML页面的设置(不是标题),所以标题应该没有HTTP标题字段。
我不是 HTTP 专家,不知道所有领域,但我不记得在我曾经使用过的任何服务器中设置页面标题(只是状态代码、协议等)
【讨论】:
很老的问题,我知道。 但是我今天遇到了完全相同的问题并找到了解决方案。
我创建了一个这样的 PHP-Skript(例如 download.php,文件名无关紧要):
<?php
header("Content-Type: application/pdf");
header('Content-Disposition: inline; filename="'.addslashes($_REQUEST['title']).'"'); //filename doesn't set the browser title here, only when page is saved/downloaded
$content = file_get_contents($_REQUEST['filename']);
header('Content-Length: '.strlen($content));
echo $content;
在我的设置(Windows 10;Apache 2.4.37;PHP 7.1.25)中,您现在可以执行如下请求: http://..../download.php/browser_title?filename=test.pdf
我在 Chrome 和 Firefox 中成功测试了这个。 Internet Explorer 无法显示 PDF 文档内联:-/。 Microsoft Edge 还在标题栏中包含 URL 参数 :-(.
【讨论】: