문제

I am creating resources on a node server and attaching an ETag to each one of them. I am using the method found in this question What encoding should I use to properly generate an ETag with crypto in nodeJS? for generating the ETags. However, when I do a HEAD request on command line using curl, like:

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

the answer is

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
$

and I have to specifically press Control-C in order to see the command prompt again. On the other hand, I find this strange, because the way I am handling the HEAD request is through app.head on node and after the authentication I am calling the function:

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();
    }
};

In other words, even though I have the res.end(); command in the end, the transmission for some reason has not stopped. As far as I understand a HEAD request should get the same header as a GET request. The difference with a GET is that in the case of HEAD we do not have the body of a GET request. Can you tell what seems to be the problem here?

도움이 되었습니까?

해결책

You're right about the behaviour of the HTTP methods, it's just the curl that's wrong, you want:

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

not -X HEAD which is saying use a HEAD method of HTTP rather than a GET which only returns the headers

다른 팁

It's not your server's fault. When I do curl -i -X HEAD http://google.com I have to kill curl to get back to the prompt, which is odd, because a curl GET request actually does drop me back to the prompt.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top