正在生成格式错误的标头
Posted
技术标签:
【中文标题】正在生成格式错误的标头【英文标题】:malformed header being generated 【发布时间】:2021-09-07 09:24:46 【问题描述】:我正在尝试上传 .html 文件的 Windows 10/Apache/dHTML (Perl) 平台。我有一个表单,允许我浏览以选择要上传的文件。表单行如下。
<FORM encTYPE='multipart/FORM-data' ACTION='uploadx.cgi' NAME='ManMe' METHOD='POST' ONSUBMIT='return reqchk()'>\n";
我在uploadx.cgi 中获得了正确的上传路径和文件以及目标路径和文件,如下面的cmets 所示。实际上传代码如下。
# comment - $upload_filehandle is C:\usr\www\kyhealth.html - correct input location
$upload_filehandle = $page->upload("filex"); # File handle to uploaded file.
# comment - $thefn C:/Steep/USAData/State/KY/Ideals/Health/kyhealth.html - correct output location
open(my $UF_fh,'>',$thefn) || croak "Couldn't open file $filex, $!";
if (index(lc($thefn),'.gif') > -1)
binmode($UF_fh); # Set file output to binary mode if image.
while ( <$upload_filehandle> )
print $UF_fh; # Write it out.
close $UF_fh;
执行uploaddx.cgi的Apache日志文件中的错误如下。
[Wed Jun 23 15:16:44.349636 2021] [core:error] [pid 9772:tid 1056] [client 192.253.246.153:62520] 脚本“uploadx.cgi”的标头格式错误:标头错误:,引用者: http://steepusa.no-ip.info/scx/cmf2mme.cgi?strmme=SKY_458~422~438~428~430~382_326~366~438~458~450~392_U_level3_326~366~438~458~450~392 [2021 年 6 月 23 日星期三 15:16:44.349636] [perl:warn] [pid 9772:tid 1056] /scx/uploadx.cgi 没有发送 HTTP 标头
在正确的位置使用正确的名称创建输出文件。但是该文件的字节数为零。 uploadx.cgi 文件中没有“Content-type: text/html”标头。它只是尝试上传 该文件并将其放入特定目录中的新文件中,如上所示。而“坏标题:”并没有告诉我太多。
我在这里和其他地方看过很多关于类似问题的帖子,但没有运气。任何帮助,将不胜感激。我不知道如何在这个上移动球。谢谢。
ct
【问题讨论】:
ikegami,我不知道我需要发送一个标题。所以我很困惑为什么我会收到错误。在更新结束时,我调用了一个小程序,如下所示。sub getback1 my $appbgcolr = shift; print "Content-type: text/html\n\n"; print "<HTML><BODY STYLE='BACKGROUND-COLOR:#$appbgcolr;'>\n"; print "<SCRIPT TYPE='text/javascript'> window.alert('The file has been uploaded. Verify\\r\\nthe upload in the user interface.'); window.history.go(-1); </SCRIPT>\n"; print "</BODY></HTML>\n"; return;
这会是问题吗?我不这么认为。我不知道。
我想这可能是它咆哮的标题。它会生成消息,但在我响应警报之前不会为背景着色。我对此感到困惑。
updatex 进程是初始选择表单的后端,并在 updatex 结束时的警报消息之后返回到该表单。
【参考方案1】:
第一条消息来自第一条消息。脚本发出的标头格式错误,因为根本不发出任何标头是格式错误的标头/响应。
uploadx 进程中没有编码的内容头
HTTP 请求必须产生响应。您似乎声称您没有发送响应,这将导致这种错误。当您使用 CGI 脚本时,脚本有责任产生此响应。如果您不这样做,服务器通常会发送 500 错误响应并记录一条消息,例如您询问的消息。
请记住,脚本不发送标头的一个常见原因是它在有机会这样做之前就死了(由于编译时或运行时错误)。像这种情况应该在日志文件中留下较早的消息。
【讨论】:
您能解释一下您所说的http请求和响应是什么意思吗?感谢您花时间帮助我。 当我在警报发生时检查 hte 进程时,我看到以下内容。 在 DOM 中,我看到 body 标记后跟 GLOB(0x27faa7560f0) 数百次,然后是内容标题和子程序的其余部分。在调试器中,我得到 GLOB(0x27faa7560f0) 几百次,然后是 sub 下降到左括号。 HTML1300:发生导航。 uploadx.cgi HTML1527:需要 DOCTYPE。考虑添加一个有效的 HTML5 文档类型:“”。 uploadx.cgi (1,4096) HTML1513:发现额外的“”标签。每个文档只能存在一个“”标签。 uploadx.cgi (3,1) HTML1503:意外的开始标记。 uploadx.cgi (3,7) HTML1512:不匹配的结束标记。 uploadx.cgi (3,13) HTML1514:找到额外的“”标签。每个文档只能存在一个“”标签。上传x.cgi (3,20) 我在控制台中收到了上述警告。我在调试器代码中没有看到任何这些。【参考方案2】:事实证明,我的 ping、下载和上传速度明显下降。当我刚刚与我的提供商进行速度测试时,我的上传速度实际上为零。我的电信供应商已经开了一张票。这是我第一次遇到这种情况。谢谢池上。
【讨论】:
【参考方案3】:我从热点互联网连接更改为路由器,这解决了格式错误的标头问题。所有上传测试均通过路由器连接成功。
【讨论】:
以上是关于正在生成格式错误的标头的主要内容,如果未能解决你的问题,请参考以下文章
使用 MultipartFormDataContent 生成的错误 Content-Type 标头
Apache 从 Perl CGI 脚本的脚本返回格式错误的标头