我到处寻找但似乎找不到它。
当 apache 收到带有 body 字段的 POST / HTTP/1.1 时,这些数据是存储在内存中还是文件中?根据我的测试,它不在内存中。
这个问题的答案是否会根据数据的 mime 类型而改变?如果是这样,那么文件上传( multipart/* )会去哪里?
我知道这些数据会作为 CGI 的 STDIN 传递到目标文件,而这些系统的答案取决于那里的特定程序。例如,python 会生成临时文件。这不是我要问的问题。我具体问的是数据保存在哪里,是在服务器通过套接字接收数据和在 STDIN 上传递数据之间。
感谢您的考虑!
答案1
对于我使用过的服务器,检索帖子数据一直是应用程序的责任。HTTP 协议在标头和日期之间提供了明确的界限。服务器将处理标头并将套接字交给应用程序。当生成应用程序来处理请求时,套接字是 STDIN。应用程序将通过读取 STDIN 从套接字中检索数据。
应用程序可能在从客户端收到所有数据之前启动。它应该处理客户端在收到所有数据之前关闭连接的情况。当传输的数据很大时,如果将完整数据读入应用程序内存,可能会出现问题。将文件部分读入文件通常更好。这将是应用程序的责任。
如果发送的数据小于 TCP 窗口大小,则可能在应用程序启动前已收到数据。数据将存储在网络堆栈的缓冲区中。