html My files的实际数据http content-disposition在哪里?

balp4ylt  于 2023-04-04  发布在  其他
关注(0)|答案(2)|浏览(135)

我试图了解如何下载发送到客户端浏览器使用逆向工程的代码。
到目前为止,我发现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>
00jrzges

00jrzges1#

简单的回答是“是的,它看起来是这样的”--假设文件的内容是字面上的<html>Hello world</html>。如果它只是Hello world,那么这就是字面上的响应内容--没有“邻接的HTML”,只是用HTML响应是HTTP的一种常见用法。
正如你在任何HTTP的介绍(例如MDN,Wikipedia)中所看到的,HTTP 1.x响应由一个 * 状态行 *,一些 * 头 *,然后是 * 响应体 * 组成。(HTTP/2和HTTP/3不是基于文本的协议,所以尽管所有相同的元素都存在于响应中,但它们的格式要复杂一些。)
因此,一个非常简单的响应看起来像这样,指示一个成功的响应,带有纯文本正文:

HTTP/1.1 200 OK
Content-Type: text/plain

Hello, world!

Content-Disposition行只是一个额外的头,浏览器将其用作下一步操作的提示。

HTTP/1.1 200 OK
Content-Type: text/plain
Content-Disposition: attachment; filename=TEST1234.txt

Hello, world!

如果不知道您当前是如何查看原始HTTP流量的,就无法解释为什么您看不到完整的响应。看起来它还在某处损坏了引号,除非" ,"实际上是您建议的文件名的一部分。

polkgigr

polkgigr2#

我已经找到解决办法了...
我只是没有在HTTP头和HTML之间创建一个空行....或者在这种情况下文件内容...

.Append("HTTP/1.1 200 OK" & Environment.NewLine)
                .Append("Content-Type: text/plain" & Environment.NewLine)
                .Append("Content-Disposition: attachment; filename=" & Chr(34) & "TEST.txt" & Chr(34) & Environment.NewLine)
                .Append(Environment.NewLine)    <--------------- THIS LINE NOW WORKS
                .Append("Hello world!")

虽然有没有一种方法来编码网络freindly/安全编码的内容,浏览器知道如何解码回其原始内容...类似于base64编码?

相关问题