繁体   English   中英

如何避免或处理浏览器对servlet的“ favicon.ico”请求?

[英]how to avoid or handle request for `favicon.ico` from the browser for a servlet?

更新:即使正在发送另一个请求给favicon.ico并且函数又被执行(两个console.log(data)输出),为什么响应对象没有发送两次?

另外,是否有一种方法不发送对favcion.ico的请求,因为我不想让我的函数无用地运行两次?


我创建了一个非常简单的servlet来接受GET(默认值),并在读取文件后将内容返回到浏览器

var http = require("http");
var fs = require("fs");
var num=0;

http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
var data = '';
// Create a readable stream
var readerStream = fs.createReadStream('input.txt');

// Set the encoding to be utf8. 
readerStream.setEncoding('UTF8');

// Handle stream events --> data, end, and error
readerStream.on('data', function(chunk) {
   data += chunk;
});

readerStream.on('end',function(){
console.log(data); //To print same file content in the console
response.end(data);
});

readerStream.on('error', function(err){
   console.log(err.stack);
   data+="\n\n"+err.stack;
});


}).listen(8081);

// Console will print the message
console.log('Server running at http://127.0.0.1:8081/');

但是每次我运行这个servlet并在http:// localhost:/ 8081发出请求时, 我都会在控制台上打印两次该文件的内容,但在浏览器窗口上只能打印一次 (这是预期的行为)。

控制台行为的原因是什么?

另外,我通过添加一个计数器来对每个请求运行该函数的次数进行了修改(对consoleresponse都附加了data+num的值),从而修改了程序,结果发现它是两个,但是第一次执行时的响应函数的功能是浏览器接收到的功能,而不是第二个功能(浏览器窗口为第一个请求打印了+1的数据 )。

正如@sForSujit指出的那样,浏览器显然希望对每个页面做出两个请求,另一个是名为favicon.ico的文件,该文件是在浏览器选项卡上显示的页面标题旁边的图标文件。

这导致服务器也捕获了两个请求,服务器再次进行了文件读取操作,并第二次将其打印在控制台上。 寻找客户端文件favicon.ico作为响应对象时,响应对象也第二次在客户端变得无用。

如何获取?

浏览器尝试通过首先从您的网页目录中请求“ favicon.ico”来获取该图标。 如果找不到此类文件,它将尝试从您网站的根目录中获取该文件,否则,它将仅使用默认图标。

Chrome浏览器在根目录中搜索favicon.ico文件。

Firefox在每个页面上都需要此:

<link rel="icon" type="image/png" href="/favicon.png" />

大多数(如果不是全部)现代浏览器也可以使用favicon.ico文件。 实际上,他们中的许多人还接受其他图形格式的文件,例如PNG格式。

但是,这又需要为您希望显示自定义图标的网站的每个网页设置。 要知道该如何处理,请在此处阅读SO答案


如何避免favico.ico请求?

沃格的答案,

以下解决方案非常简短,有效的HTML5,不会引起IE 8及更高版本的怪癖。

只需将以下行添加到HTML文件的部分:

<link rel="icon" href="data:,">

例如,大多数浏览器都会调用/favicon.ico。

尝试记录该URL,您可以看到正在调用的内容。

console.log(req.url);

我发现此有效的URL链接摆脱了网站图标错误。

<link rel="icon" href="data:;base64,iVBORw0KGgo=">

希望你觉得它有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM