我想在LINUX(SLES64)上的C CGI程序中處理POST數據從Web服務器讀取標準輸入
第一步,我得到帶有內容長度的HTTP標頭。
現在我想從標準輸入中讀取POST數據。
我想讀取大約5000字節的CGI數據。每個帖子都會被忽略!
number_of_bytes_read = read(0, buffer, content_length);
現在有一個特殊情況:
用戶填寫在瀏覽器中的表單,然後他點擊提交。
apache web服務器接收請求頭和表單數據。
Apache將請求標頭「content-length」,在本例中爲4875個字節,也需要使用長度爲「字節流」的4875個字節的 。
現在Apache創建一個新的進程,最終將處理cgi數據。
Apache必須將cgi數據的4875個字節交給新進程。
他是怎麼做到的?
他是否正在執行進程間通信,Apache是否正在爲新進程創建一個套接字?
在這種情況下,另一邊,CGI程序可以遇到以下問題:
CGI程序獲取內容長度,希望在一次通過讀取4875個字節,但由於 網絡延遲得到第一次只有4300字節。
但是,如果Apache沒有創建一個套接字到新的cgi進程(進程間通信),可能 它是因爲cgi程序也不能在第一次獲取所有字節?
「*您要讀取直到您讀取EOF ... *」,或者直到所有調用read()返回的值的總和爲5000或read()返回爲止。 -1'。 – alk 2014-10-06 13:02:40
感謝您的接觸,我更新了我的答案。 – CalumMcCall 2014-10-06 13:04:07