我有一個奇怪的HTTP和HTTP類似的處理案例,我必須支持一些破損的客戶端。具體而言,客戶端將發出HTTP PUT請求,並且在客戶端發送請求主體之前,需要在收到請求頭之後發送200 OK
。通常情況下,我這樣做:正確的Node.js API用於確定是否發送了'100 Continue'
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
消息。因此,客戶端會得到兩條狀態行:
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
,然後將其傳回正常堆棧進行處理,那麼一切都會好起來的。但是,我沒有看到有記錄的方式來做到這一點。