为什么cgi POST数据被乱码和截断

时间:2012-08-03 20:53:41

标签: javascript post xmlhttprequest cgi

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没什么)

1 个答案:

答案 0 :(得分:0)

这是一次愚蠢的攻击。<​​/ p>

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

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

现在好多了。