我使用QTcpSocket通过HTTP在本地提供一些文件。我的问题是,只有wget正确下载文件,firefox会在最后添加四个额外的字节。这是我送的标题:服务HTTP内容长度不正确?
HTTP/1.0 200 Ok
Content-Length: 382917;
Content-Type: application/x-shockwave-flash;
Content-Disposition: attachment; filename=file.swf;
这是用来发送响应代码:
QTextStream os(socket);
os.setAutoDetectUnicode(true);
QString name = tokens[1].right(tokens[1].length() - 1);
QString resname = ":/" + name; // the served file is a Qt resource
QFile f(resname); f.open(QIODevice::ReadOnly);
os << "HTTP/1.0 200 Ok\r\n" <<
"Content-Length: " << f.size() << ";\r\n" <<
"Content-Type: application/x-shockwave-flash;\r\n" <<
"Content-Disposition: attachment; filename=" << name <<
";\r\n\r\n";
os.flush();
QDataStream ds(socket);
ds << f.readAll();
socket->close();
if (socket->state() == QTcpSocket::UnconnectedState)
{
delete socket;
}
正如我上文所述,wget的得到它的权利和正确下载文件。问题是Firefox(和我的目标应用程序,一个Flash ActiveX实例)没有。
四个额外的字节都是一样的:4E E9 A5 F4
Hex dump http://www.freeimagehosting.net/uploads/a5711fd7af.gif
我的问题是我在做什么错了,我应该怎么改得到它吗?提前致谢。
我删除了它们,但没有更改。 – 2010-08-09 13:08:16
'Content-Disposition'肯定是HTTP的一部分。 RFC2616,第19.5.1节。 – bobince 2010-08-09 13:57:21
@bobince:第19.5节是“附加功能”,讨论实现者应该意识到但不依赖于的东西。 RFC2616的第15.5节说:“内容处置不是HTTP 标准的一部分,但由于它被广泛实施,我们正在记录其实施者使用和风险” – janm 2010-08-09 14:19:58