spdy.node.js: я только что получил 324 (ERR_EMPTY_RESPONSE)
Я просто хотел попробовать SPDY, используя пакет узлов "node-spdy".
Мой JavaScript:
РЕДАКТИРОВАТЬ: Теперь скрипт включает в себя информацию о сертификатах. Я взял их из тестового приложения twitlog.
var spdy = require('spdy'),
fs = require('fs');
var options = {
key: fs.readFileSync(__dirname + '/keys/spdy-key.pem'),
cert: fs.readFileSync(__dirname + '/keys/spdy-cert.pem'),
ca: fs.readFileSync(__dirname + '/keys/spdy-csr.pem')
};
var spdy = require('spdy');
var server = spdy.createServer({}, function(req, res) {
console.log('Send response...');
res.writeHead(200, {
"Content-Type": "text/plain"
});
res.write("Hello World!\n");
res.end();
console.log('Response has been sended.');
});
server.listen(3000);
Моя проблема: функция обратного вызова никогда не выполняется, соответственно, узел никогда не регистрирует "Отправить ответ..." или "Ответ отправлен". Я просто получаю пустой ответ, но node.js не выбрасывает исключение:
Fehler 324 (net:: ERR_EMPTY_RESPONSE)
Мой серверный конфиг : я использую node.js (версия 0.7.6) и node-spdy (commit eafd9c9fdd
) под Windows Se7en.
Моя конфигурация на стороне клиента: я использую сборку Chromium в качестве браузера для тестирования Spdy Out. Во время моих тестов я не использую SSL, поэтому мне пришлось изменить свою конфигурацию. Это то, что вы можете найти под about:net-internals/#spdy
:
==SPDY Status==
SPDY Enabled: true
Use Alternate Protocol: false
Force SPDY Always: true
Force SPDY Over SSL: false
Next Protocols:
Мой отладочный материал на стороне клиента: служба отладки Chromium about:net-internals/#tests
говорит мне:
Result Experiment Error Time (ms)
FAIL Fetch http://localhost:3000/
Don't use any proxy EMPTY_RESPONSE (-324) 3022
Fetch http://localhost:3000/
Use system proxy settings ? ?
РЕДАКТИРОВАТЬ: так как я добавил информацию о сертификате, информация отладки на стороне клиента немного изменилась. Вот самый новый:
Result Experiment Error Time (ms)
FAIL Fetch https://localhost:3000/
Don't use any proxy ABORTED (-3) 9
FAIL Fetch https://localhost:3000/
Use system proxy settings ABORTED (-3) 300489
FAIL Fetch https://localhost:3000/
Use Firefox's proxy settings ABORTED (-3) 4
FAIL Fetch https://localhost:3000/
Use system proxy settings ABORTED (-3) 300438
Мой отладочный материал на стороне сервера: вот что мне сообщает встроенный отладчик узлов при получении запроса:
РЕДАКТИРОВАТЬ: Отладка на стороне сервера не изменится, даже если я добавлю информацию сертификата в сценарии.
debug>n
break in net.js:865
863
864 function onconnection(clientHandle) {
865 var handle = this;
866 var self = handle.socket;
867
debug>
break in net.js:866
864 function onconnection(clientHandle) {
865 var handle = this;
866 var self = handle.socket;
867
868 debug('onconnection');
debug>
break in net.js:868
866 var self = handle.socket;
867
868 debug('onconnection');
869
870 if (!clientHandle) {
debug>
break in net.js:870
868 debug('onconnection');
869
870 if (!clientHandle) {
871 self.emit('error', errnoException(errno, 'accept'));
872 return;
debug>
break in net.js:875
873 }
874
875 if (self.maxConnections && self.connections >= self.maxConnections) {
876 clientHandle.close();
877 return;
debug>
break in net.js:880
878 }
879
880 var socket = new Socket({
881 handle: clientHandle,
882 allowHalfOpen: self.allowHalfOpen
debug>
break in net.js:884
882 allowHalfOpen: self.allowHalfOpen
883 });
884 socket.readable = socket.writable = true;
885
886 socket.resume();
debug>
break in net.js:886
884 socket.readable = socket.writable = true;
885
886 socket.resume();
887
888 self.connections++;
debug>
break in net.js:888
886 socket.resume();
887
888 self.connections++;
889 socket.server = self;
890
debug>
break in net.js:889
887
888 self.connections++;
889 socket.server = self;
890
891 ;
debug>
break in net.js:892
890
891 ;
892 self.emit('connection', socket);
893 socket.emit('connect');
894 }
debug>
break in net.js:893
891 ;
892 self.emit('connection', socket);
893 socket.emit('connect');
894 }
895
debug>
break in net.js:894
892 self.emit('connection', socket);
893 socket.emit('connect');
894 }
895
896
debug>
Мой вопрос: я просто хочу вернуть простое текстовое сообщение клиенту, используя SPDY. Как я могу сделать это с помощью node.js? - Если вам нужно больше деталей, пожалуйста, скажите мне. Спасибо за ваши ответы.
2 ответа
ERR_EMPTY_RESPONSE означает, что Chromium смог подключиться к сокету, но получил пустой ответ. По всей вероятности, это указывает на проблему с конфигурацией сервера, тем более что обратный вызов никогда не вызывается. Крис Стром (автор node-spdy), вероятно, был бы рад помочь вам здесь.