根据HTTP协议规范9.4 HEAD
的HEAD方法等同于GET 不同的是在响应服务器不能返回 消息正文。响应于HEAD请求 的HTTP 头中包含的元信息应当与响应于GET请求发送的信息 相同。 此方法可用于获取 有关实体 的元信息,该请求暗示请求没有 传输实体主体本身。 此方法通常用于测试 有效性的超文本链接, 可访问性和最近的 修改。
到HEAD请求的响应可以是在这个意义上 缓存包含在响应 的 信息可被用于更新从该资源的先前 高速缓存的实体。如果 新的字段值表明 缓存的实体从目前 实体的不同(如将在内容长度,内容,MD5, ETag的或上次修改一个 变化来表示),那么缓存 必须把缓存条目为陈旧。
如果你的服务器没有正确响应这个,我想你可能会不幸运? 接下来只是简单地使用google.request('HEAD'
代替google.request('GET'
一些代码
我测试下面的下面。 fake.js只是一个使用快递进行测试的假服务器。
fake.js:
var HOST = 'localhost';
var PORT = 3000;
var connections = 0;
var express = require('express');
var app = module.exports = express.createServer();
if (process.argv[2] && process.argv[3]) {
HOST = process.argv[2];
PORT = process.argv[3];
}
app.use(express.staticProvider(__dirname + '/public'));
// to reconnect.
app.get('/small', function(req, res) {
console.log(req.method);
if (req.method == 'HEAD') {
console.log('here');
res.send('');
} else {
connections++;
res.send('small');
}
});
app.get('/count', function(req, res) {
res.send('' + connections);
});
app.get('/reset', function(req, res) {
connections = 0;
res.send('reset');
});
if (!module.parent) {
app.listen(PORT, HOST);
console.log("Express server listening on port %d", app.address().port)
}
test.js是从http客户端测试头。 测试。JS:
var http = require('http');
var google = http.createClient(3000, 'localhost');
var request = google.request('HEAD', '/small',
{'host': 'localhost'});
request.end();
request.on('response', function (response) {
console.log('STATUS: ' + response.statusCode);
console.log('HEADERS: ' + JSON.stringify(response.headers));
response.setEncoding('utf8');
});
[email protected]:~/node/stackoverflow/4832362$ curl http://localhost:3000/count
0
[email protected]red-laptop:~/node/stackoverflow/4832362$ node test.js
STATUS: 200
HEADERS: {"content-type":"text/html; charset=utf-8","content-length":"0","connection":"close"}
[email protected]:~/node/stackoverflow/4832362$ curl http://localhost:3000/count
0
正如你可以看到仍为0
太棒了!谢谢。 – Carlosedp 2011-01-29 15:39:09