执行HEAD请求时curl不会返回

Mig*_*use 6 etag curl node.js

我正在节点服务器上创建资源并将ETag附加到每个资源上.我正在使用此问题中找到的方法我应该使用什么编码来在nodeJS中正确生成带加密的ETag?用于生成ETag.但是,当我HEAD使用curl在命令行上发出请求时,例如:

$ curl -i -u username:password -X HEAD http://localhost:3000/aResource/0
Run Code Online (Sandbox Code Playgroud)

答案是

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
$
Run Code Online (Sandbox Code Playgroud)

我必须特意按下Control-C才能再次看到命令提示符.另一方面,我发现这很奇怪,因为我处理HEAD请求的方式是通过app.head在节点上,在验证后我调用函数:

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();
    }
};
Run Code Online (Sandbox Code Playgroud)

换句话说,即使我有res.end(); 命令到底,由于某种原因传输还没有停止.据我所知,HEAD请求应该获得与请求相同的标头GET.与a的区别GET在于HEAD我们没有GET请求的主体.你能说出这里似乎有什么问题吗?

小智 7

你对HTTP方法的行为是正确的,你想要的只是卷曲是错误的:

curl -I -u username:password http://localhost:3000/aResource/0
Run Code Online (Sandbox Code Playgroud)

不是-X HEAD说的是使用HTTP的HEAD方法而不是仅返回标头的GET