C++アプリケーションでhttp://fastcgi.com/のライブラリをバックエンドとして使用し、nginx Webサーバーをフロントエンドとして使用しています。FastCGIアプリケーションでHTTP POSTの本体を取得できない
HTMLフォームから1MBのファイルが成功し、変数 "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がHTTP POSTの本体を正しく送信していることを示していますが、1MBのjpegファイルも含まれています。
したがって、POSTリクエストによってHTMLフォームから送信されたデータを取得する方法はクリーンではありません。