2016-11-28 929 views
1

我正在將請求從NodeJ發送到使用HTTP/0.9的舊服務器。響應來,並引發錯誤:Parse Error。在有關HTTP協議支持的文檔中找不到任何內容。我做錯了什麼或者NodeJS不支持HTTP/0.9nodejs中的HTTP/0.9支持

回答

2

節點不支持HTTP/0.9不僅僅因爲它很難再使用,而是因爲真正的HTTP/0.9響應只是由響應數據組成。這意味着沒有狀態行指示響應的HTTP版本,所以無法區分HTTP/0.9響應和格式錯誤的HTTP/1.x響應,甚至是以字符串「HTTP開頭的HTTP/0.9響應/1.1 200 OK \ r \ n「。

+0

你說得對,沒有協議版本,只有響應數據。有沒有辦法破解它?爲了不接受這個'Parse Error'? TCP使用'net'模塊? – notgiorgi

+0

你可以直接使用純TCP套接字,是的。只要確保您發送正確格式的HTTP/0.9請求。 – mscdex

+0

這方面的資源?我的意思是如何形成正確的HTTP/0.9請求 – notgiorgi

0

假設你使用linux,一種破解它的方法是使用curl子進程。 這是一個代碼示例,應用於指向舊Shoutcast服務器的URL。

var URL = "http://streaming3.radiocat.net/;"; 

// This will fail because HTTP 0.9 is not supported by Node. 
var http = require("http"); 
var url = require("url"); 
http.get(url.parse(URL), function (res) { 
    res.on("data", function(data) { 
     console.log(data); 
    }); 
}); 


// This will work 
var cp = require('child_process'); 
var request = cp.spawn("curl", ["-L", URL], { stdio: ['pipe', 'pipe', process.stderr] }); 
request.stdout.on("data", function(data) { 
    console.log(data); 
}); 


/* Detail of the http.get error: 
events.js:182 
     throw er; // Unhandled 'error' event 
    ^

Error: Parse Error 
    at Socket.socketOnData (_http_client.js:454:20) 
    at emitOne (events.js:115:13) 
    at Socket.emit (events.js:210:7) 
    at addChunk (_stream_readable.js:266:12) 
    at readableAddChunk (_stream_readable.js:253:11) 
    at Socket.Readable.push (_stream_readable.js:211:10) 
    at TCP.onread (net.js:585:20) 
*/