2016-11-28 2 views
1

Я отправляю запросы от NodeJ на старый сервер, который использует HTTP/0.9. Ответ приходит и выдает ошибку: Parse Error. Не удалось найти что-либо в документах по поддержке протокола HTTP. Я что-то делаю неправильно, или NodeJS не поддерживает HTTP/0.9?Поддержка HTTP/0.9 в nodejs

ответ

2

Узел не поддерживает HTTP/0.9 не только потому, что он больше не используется, а потому, что реальные ответы HTTP/0.9 только состоят из данных ответа. Это означает, что нет строки состояния, указывающей HTTP-версию ответа, поэтому нет возможности дифференцировать ответ HTTP/0.9 от неправильного ответа HTTP/1.x или даже ответа HTTP/0.9, который начинается со строки «HTTP /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, заключается в использовании дочернего процесса с завитком. Вот пример кода, применяемый к URL-адресу, указывающему на старый сервер Shoutcast .;

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) 
*/ 
Смежные вопросы