C++ 응용 프로그램에서 http://fastcgi.com/의 라이브러리를 백엔드로 사용하고 nginx 웹 서버를 프런트 엔드로 사용하고 있습니다.FastCGI 응용 프로그램에서 HTTP POST 본문을 가져올 수 없습니다.
1MB 파일을 HTML 형식에서 성공적으로 게시하고 "CONTENT_LENGTH"변수가 충분히 큽니다. :) 그러나 libfcgi를 사용하여 POST 요청 본문에 액세스하는 방법을 알 수 없습니다. 이것은 내 HTML 양식이며 훌륭하게 작동합니다.
<form action="/upload" enctype="multipart/form-data" method="POST">
<input type="test" name="text1" />
<input type="file" name="file1" />
<input type="submit" />
</form>
요청이 FCGX_Request 내부
int FCGX_Accept_r(FCGX_Request *request);
를 통해 허용됩니다 우리는 3 개 스트림을 가지고있는, 밖으로, ERR. 스트림 플래그 isReader == 1, 타인 isReader의 == 0
typedef struct FCGX_Stream {
unsigned char *rdNext; /* reader: first valid byte
* writer: equals stop */
unsigned char *wrNext; /* writer: first free byte
* reader: equals stop */
unsigned char *stop; /* reader: last valid byte + 1
* writer: last free byte + 1 */
unsigned char *stopUnget; /* reader: first byte of current buffer
* fragment, for ungetc
* writer: undefined */
int isReader;
int isClosed;
int wasFCloseCalled;
int FCGI_errno; /* error status */
void (*fillBuffProc) (struct FCGX_Stream *stream);
void (*emptyBuffProc) (struct FCGX_Stream *stream, int doClose);
void *data;
} FCGX_Stream;
있습니다 "의"모든 포인터 rdNext, wrNext 차이가 == 0 차액을 중지 (정지 - stopUnget)는 약 0x500이고 .
stopUnget과 stop 사이의 데이터를 읽으면 내 응용 프로그램에 nginx가 보낸 "FASTCGI-dump"가 표시되지만 양식을 통해 전송 된 데이터는 없습니다.
nginx와 fastcgi 응용 프로그램 사이의 스니퍼는 nginx가 1MB jpeg 파일을 포함하여 HTTP POST 본체를 올바르게 보내고 있음을 보여줍니다.
따라서 POST 요청을 통해 HTML 양식에 의해 전송 된 데이터를 가져 오는 방법은 깨끗하지 않습니다.