执行HEAD请求时,curl不会返回

我正在节点服务器上创build资源并将ETag附加到它们中的每一个上。 我正在使用在这个问题中find的方法我应该使用什么编码来正确地生成nodeJSencryption的ETag? 用于生成ETags。 但是,当我使用curl在命令行上执行HEAD请求时,如:

 $ curl -i -u username:password -X HEAD http://localhost:3000/aResource/0 

答案是

 HTTP/1.1 200 OK X-Powered-By: Express ETag: "1a37c148692f92ad6c97887f77c873e6" Content-Type: text/plain Date: Sat, 26 Oct 2013 01:06:28 GMT Connection: keep-alive ^C $ 

我必须特别按下Control-C才能再次看到命令提示符。 另一方面,我觉得这很奇怪,因为我处理HEAD请求的方式是通过app.head节点和身份validation后,我正在调用该函数:

 function serveResourceEtag(req, res) { console.log("Following route through HEAD"); var anID = parseInt(req.params[resourceID], "utf8"); if (anID < serverData.resourceEtags.length) { res.writeHead (200, {"ETag": "\"" + serverData.resourceEtags[anID] + "\"", "Content-Type": "text/plain"}); res.end(); } else { res.writeHead (404, {"Content-Type": "text/plain"}); res.end(); } }; 

换句话说,即使我有res.end(); 指挥到底,传输出于某种原因还没有停止。 据我所知,一个HEAD请求应该获得与GET请求相同的头文件。 与GET的不同之处在于,在HEAD的情况下,我们没有GET请求的主体。 你能告诉这里似乎是什么问题吗?

你对HTTP方法的行为是正确的,那就是你想要的错误:

 curl -I -u username:password http://localhost:3000/aResource/0 

不是-X HEAD,它是指使用HTTP的HEAD方法,而不是只返回标题的GET

这不是你的服务器的错。 当我curl -i -X HEAD http://google.com我必须杀死curl才能回到提示,这很奇怪,因为curl GET请求实际上让我回到提示符。