关于HTTP Content-Disposition及文件下载响应内容的技术问询
确认HTTP响应中文件内容的位置
文件的实际数据确实在HTTP响应里,具体位置就在HTTP响应头之后的响应体部分,和响应头之间用一个空行分隔(这是HTTP协议的强制要求)。
拆解你看到的PHP代码逻辑
你贴的那段PHP代码里,readfile($filename);就是关键:它会在服务器端读取指定文件的内容,然后直接把内容输出到HTTP响应流里,也就是响应头后面的响应体位置。
正确的响应示例(以你的download.txt为例)
假设download.txt的内容是Hello world,实际的完整HTTP响应应该是这样的:
HTTP/1.x 200 OK Content-Type: application/octet-stream Content-Disposition: attachment; filename="download.txt" Hello world
你之前猜想里的<html>Hello world</html>是多余的——只有当服务器要返回HTML页面内容时才需要加标签,纯文本文件就直接输出内容本身即可。
关于你最初看到的不完整HTTP头
你一开始看到的那段只有响应头的内容,应该是被截断了的片段。完整的文件下载响应,必然会在响应头之后跟上文件的实际内容。而Content-Disposition: attachment的作用,就是告诉浏览器:这个响应不是要在页面里展示的内容,而是要作为附件保存,并且文件名是指定的名称。
内容的提问来源于stack exchange,提问作者LabRat
相关产品推荐
相关产品推荐

