私はリクエストペイロードへのネイティブアクセスを提供していない古いバージョンのmongoose(オープンソースWebサーバー)をC言語で使用しています。 POSTリクエストとPUTリクエストをサポートするために、手動で変更しました。mongooseがヘッダを読み込んだ後、Content-Length
が設定されているかどうかを確認し、そうであれば、ソケットからContent-Lenght
文字を再度読み込みます。Mongoose WebServerでリクエスト本体を取得する際のエラー
findCL = strstr(conn->buf, "Content-Length:");
if (findCL)
{
// skip "Content-Length:" string
findCL += 15 * sizeof(char);
findCLEnd = (char*)strchr(findCL, delimiter);
sizeLen = findCLEnd - findCL;
strncpy(CLSize, findCL, sizeLen);
CLSize[sizeLen] = '\0';
size = strtoll(CLSize, NULL, 10);
if (size > 0)
{
conn->content_len = read_request(NULL, conn->client.sock, conn->ssl,
conn->buf, conn->buf_size, &conn->data_len);
conn->content_len = size;
perror("recv");
body = (char*)malloc(sizeof(char) * (size + 1));
strncpy(body, conn->buf + conn->request_len, size);
body[size] = '\0';
}
}
これまでのところ、コードが美しくない場合でも、それは汚い仕事です。問題は、デバッグではコードは正常に動作しますが、コードが単純なバックグラウンドプロセスとして実行されるとき、ボディは正しく解析されません。時には結果のボディが切り捨てられます。この問題は、クライアントからの高速クエリによって発生しているようです。
どこから送信されましたか? chromeやfirefoxで再現できません...どちらもContent-Lengthを '$ .ajax'を使って適切に追加します。不足しているヘッダを再現するデモを作成する – charlietfl
jQueryとAJAXでタグ付けされた質問を開いてからCコードを表示し、Javascriptは表示されないことは奇妙です。 –
@ JaredFarrish、私はまた "mongoose"とタグ付けしました。 – phagio