壊れたクライアントをサポートする必要がある場合、私は奇妙なHTTPとHTTPのような処理をします。具体的には、クライアントはHTTP PUT要求を行い、クライアントが要求本体を送信する前に、要求ヘッダーを受信した後に200 OK
を送信する必要があります。通常、私はこれを行う:「100 Continue」が送信されたかどうかを判断するための適切なNode.js API
app.put('/*', function (req, res, next) {
res.socket.write('HTTP/1.0 200 OK\r\n\r\n');
/* Pipe socket and handle data here */
}
しかし、Node.jsの(これを書いているようV6.2.2)の新しいバージョンを使用して、クライアントが適切なHTTP/1.1リクエストで接続し、そのリクエストヘッダでExpect: 100-continue
たときに、私自身の応答ステータスラインを送信する機会を得る直前に、HTTPサーバはHTTP/1.1 100 Continue
メッセージを(正しく)送信します。その結果、クライアントは次の2つのステータス行を取得します。
HTTP/1.1 100 Continue
HTTP/1.0 200 OK
これは大きな問題ではありません。 Node.js HTTPサーバーがステータス行を処理したときに検出する必要があるため、重複を送信しません。トリックは、私はこのAPIが適切に公開されているとは思わない。私の周り突いと、この方法を思い付いた:
app.put('/*', function (req, res, next) {
if (!res._sent100) {
res.socket.write('HTTP/1.0 200 OK\r\n\r\n');
}
/* Pipe socket and handle data here */
}
私の質問:ビルトインHTTPサーバがres._sent100
を使って、より100 Continue
を送信したときを検出するためのより良い方法はありますか?
HTTP server checkContinue
eventがあります。しかし、私がそのイベントを処理すると、通常のイベントは発生しません。私はExpressと組み合わせてこれを使用しています。通常のミドルウェアスタックが実行されるように、通常のリクエストイベントが必要です。 checkContinue
を処理できる場合は、自分自身のプロパティーをres
に書き込んでから、通常のスタックに戻して処理してください。しかし、私はこれを行うための文書化された方法はありません。