私は http サーバーを作成していますが、PUT 要求を実装する方法について質問がありました。
CRLF "\r\n" という新しい行に到達するまで、一度に 1 バイトずつクライアント ソケットを読み取ります。この行をパーサーに送信してトークン化します。連続して 2 つの改行が発生したら、応答を送信します (要求が終了したことを象徴するのが http の標準であるため)。
これは、GET/HEAD/DELETE の実装には問題ありませんでした。しかし、PUT にはコンテンツの二重改行があることがわかりました。
PUT /index.html HTTP/1.0
Headers: stuff <--- not the real CRLF 1
<--- not the real CRLF 2
html content goes here <--- CRLF 1
<--- CRLF 2 ... done, send response
それを説明するのは簡単です。解析した最初の行が PUT の場合は、2 番目の CRLF1+2 を取得するまでリクエストを送信しないでください。
しかし、コンテンツに改行も含まれている場合はどうすればよいでしょうか。