2013-08-09 2 views
6
var http = require('http'); 

var server = http.createServer(function (request, response) { 
    response.writeHead(200, {"Content-Type": "text/plain"}); 
    response.end("Hello World\n"); 
}); 

server.listen(8000); 
console.log("Server running at http://127.0.0.1:8000/"); 

я выполнил следующий локон команды:Node.js: завиток: (52) Пустой ответ от сервера с пространством в запросе не кодируется

curl "http://127.0.0.1:8000/" 
Hello World 

// space is not encoded 
curl "http://127.0.0.1:8000/x y" 
curl: (52) Empty reply from server 

curl "http://127.0.0.1:8000/x" 
Hello World 

// space is encoded 
curl "http://127.0.0.1:8000/x%20y" 
Hello World 

Можете ли вы объяснить, почему я получаю завивки 52 ?? ?

В этом случае, я хочу отправить 500 обратно. Я могу это сделать?

+0

Нам нужна остальная часть кода узла и командной строки curl. Надеюсь, там есть res.send ... – Paul

+0

'app.get ('/ item/id')' означает буквально '/ item/id' not'/item/item1' – Paul

+0

Попробуйте вариант '-I' curl для объяснение. (На моей машине curl отправляет 2 запроса для команды 'curl http: // google.com/xy': сначала для Google Server, а второй для' y'.) – elmigranto

ответ

1

Даже с отсутствующим res.send это похоже на проблему с вашим маршрутом. вы, вероятно, имели в виду.

app.get('/item/:id', function(...) { 
    .. 
}) 

Примечание к : перед id. Это создает переменную, доступ к которой можно получить на req.params.id.

+0

Я обновил сообщение с полным кодом и деталями. – GJain

0

У меня тоже возникает этот вопрос. Я предполагаю, что curl ожидает уже закодированный url при цитировании двойными кавычками. Если он находит пробел в URL-адресе, он будет считать его недействительным.

И это сильно отличается от команды wget. Если вы запустите это:

wget "http://127.0.0.1:8000/x y" 

фактически Wget кодирует URL для вас и запрос на самом деле будет отправлено как:

http://127.0.0.1:8000/x%20y 

Такого рода факты действительно дразнить наши мозги.

Смежные вопросы