0

POST 的 JavaScript 是

file = document.getElementById("upfName").files[0];
xhrObj = new XMLHttpRequest();
xhrObj.open("POST", llm.serverExe + '?dataUpload', true);
xhrObj.setRequestHeader("Content-type", file.type);
xhrObj.setRequestHeader("X_FILE_NAME", file.name);
xhrObj.send(file);

C++ 中的 cgi 方面是

int iLen = atoi(getenv("HTTP_CONTENT_LENGTH"));
char* pBuff = <<allocates iLen bytes>>
read(0, pBuff, iLen);

如果我发送大约 100k 的文本(大约 10k 短行),iLen 是正确的,但只有大约 10k 的数据并且它的最后一部分是乱码(大约 1000 行之后它再次开始显示在大约 900 行,显示 100 行然后90k什么都没有)

4

1 回答 1

0

这是一次愚蠢的攻击。

1)您需要在循环中读取以获取所有数据,读取并返回“部分”数据。

2)如果数据是文本,您需要将 Windows 上的 stdin 文件模式更改为二进制,以便计数正确。否则,读取会删除回车符,从而使数据大小更小。然后由于数据少于您的预期,读取最终将不会返回(stdin 不会返回 EOF,它只是挂起)。

现在一切都好起来了。

于 2012-08-04T17:03:00.167 回答