2016-11-28 10 views
1

NodeJsからの要求を、HTTP/0.9を使用するレガシーサーバーに送信しています。レスポンスが来て、エラー:Parse Errorがスローされます。 HTTPプロトコルのサポートについて、ドキュメントで何も見つかりませんでした。間違っているかNodeJSはHTTP/0.9をサポートしていませんか?nodejsでのHTTP/0.9のサポート

答えて

2

ノードはHTTP/0.9をサポートしていません。実際にはほとんど使用されていないだけでなく、実際のHTTP/0.9応答の応答データで構成されているためです。これは、レスポンスのHTTPバージョンを示すステータス行がないことを意味します。したがって、HTTP/0.9レスポンスと、不正なHTTP/1.xレスポンス、あるいはHTTP/0.9レスポンスとの区別をする方法がありません。 /1.1 200 OK \ r \ n "

+0

あなたは正しいですが、プロトコルバージョンはなく、応答データのみです。それをハックする方法はありますか?この 'Parse Error'を取得しないようにするには? 'net'モジュールを使ったTCP? – notgiorgi

+0

プレーンなTCPソケットを直接使用することができます。正しくフォーマットされたHTTP/0.9リクエストを送信してください。 – mscdex

+0

その上のリソースは?私は正しいHTTP/0.9リクエストをどうやって作るのですか – notgiorgi

0

Linuxを使用していると仮定すると、カールした子プロセスを使用することになります。 次のコード例は、古い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) 
*/ 
関連する問題