2016-11-28 899 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) 
*/