【发布时间】:2014-10-06 12:48:51
【问题描述】:
我想在 LINUX (SLES64) 上的 C CGI 程序中处理 POST 数据
在第一步中,我得到带有内容长度的 HTTP 标头。
现在我想从标准输入读取 POST 数据。
我想读取最多 5000 字节的 cgi 数据。每个包含更多内容的 POST 都会被忽略!
number_of_bytes_read = read(0, buffer, content_length);
现在有一种特殊情况:
用户在浏览器中填写表单,然后点击提交。
Apache Web 服务器接收请求标头和表单数据。
Apache 采用请求头“content-length”,在本例中为 4875 字节,它还采用 4875 字节长的“字节流”。
现在 Apache 创建一个新进程,最终将处理 cgi 数据。
Apache 必须将 4875 字节的 cgi 数据交给新进程。
他是怎么做到的?
他是否在执行进程间通信,Apache 是否正在为新进程创建套接字??
在这种情况下,cgi程序可能会遇到以下问题:
CGI 程序获取内容长度,想在 ONE pass 中读取 4875 个字节,但由于 到网络延迟得到第一次只有4300字节。
但是如果 Apache 没有为新的 cgi 进程创建一个套接字(进程间通信),可以 是不是cgi程序也没有在第一时间抓取所有字节?
【问题讨论】: