我试图了解如何下载发送到客户端浏览器使用逆向工程的代码。
到目前为止,我发现HTTP头文件在引用Content-Disposition标签/行时发挥了很大的作用。例如,我发现下面的代码设置了一个名为TEST1234的txt文件的下载,并且它作为一个附件下载,作为内联文件的附件。
HTTP/1.x 200 OK
Content-Type: application/octet-stream
Content-Disposition: attachment; filename=" ,"TEST1234.txt
然而,我希望代码也能保存文件的实际内容,在http的其余部分,或者至少是连接的HTML代码?
是什么让我认为这是因为一些PHP代码如下...
<?php
$filename="download.txt";
header("Content-disposition: attachment;filename=$filename");
readfile($filename);
?>
我对PHP一点也不熟悉,但可以看出readfile($filename);可能会读取文件(服务器端)到一个流,并将文件编码添加到HTTP头或作为响应发布到客户端的相邻HTML中?在收到响应时,客户端浏览器知道该文件应保存为“download”. txt。假设download.txt包含文本Hello world,我认为发送的响应将如下所示?
HTTP/1.x 200 OK
Content-Type: application/octet-stream
Content-Disposition: attachment; filename=" ,"download.txt"
<html>Hello world</html>
2条答案
按热度按时间00jrzges1#
简单的回答是“是的,它看起来是这样的”--假设文件的内容是字面上的
<html>Hello world</html>
。如果它只是Hello world
,那么这就是字面上的响应内容--没有“邻接的HTML”,只是用HTML响应是HTTP的一种常见用法。正如你在任何HTTP的介绍(例如MDN,Wikipedia)中所看到的,HTTP 1.x响应由一个 * 状态行 *,一些 * 头 *,然后是 * 响应体 * 组成。(HTTP/2和HTTP/3不是基于文本的协议,所以尽管所有相同的元素都存在于响应中,但它们的格式要复杂一些。)
因此,一个非常简单的响应看起来像这样,指示一个成功的响应,带有纯文本正文:
Content-Disposition
行只是一个额外的头,浏览器将其用作下一步操作的提示。如果不知道您当前是如何查看原始HTTP流量的,就无法解释为什么您看不到完整的响应。看起来它还在某处损坏了引号,除非
" ,"
实际上是您建议的文件名的一部分。polkgigr2#
我已经找到解决办法了...
我只是没有在HTTP头和HTML之间创建一个空行....或者在这种情况下文件内容...
虽然有没有一种方法来编码网络freindly/安全编码的内容,浏览器知道如何解码回其原始内容...类似于base64编码?