为什么节点会听到两个请求? (网站图标)

问题描述 投票:0回答:2

我尝试制作一个简单的API。如果有人/某事询问:

myIP:port/query

它应该会产生一些结果。 但是,我注意到(至少)当浏览器(Chrome)发出查询时,服务器会收到两个请求。如果服务器简单设置如下:

http.createServer(function (request,result) {
    console.log(request.url);
    handleRequest(request,result);
}).listen(3000, '0.0.0.0');

它打印两个请求网址:

  • /查询
  • /favicon.ico

我想这意味着请求客户端会自动绘制一个附加请求,希望加载图标以及实际页面。

  • 这个假设正确吗?

  • 在提出请求时我可以做些什么来防止这种情况发生吗?是chrome驱动的还是我用ajax查询页面也会出现这种情况?

  • 服务器端过滤掉网站图标请求的最佳实践是什么,以最大限度地减少服务器的浪费?

ajax node.js google-chrome favicon
2个回答
0
投票
  1. 你的假设是正确的。大多数浏览器在第一次访问网站时,如果 HTML 主体头部没有指定为
    GET /favicon.ico
    的网站图标,则会发出
    <link rel="icon" ... />
  2. 不,这是客户端(浏览器)端实现的功能。您无法在服务器端采取任何措施来防止这种行为。如果请求是通过 AJAX 发出的,浏览器不会向
    /favicon.ico
    发出额外的请求,但此时浏览器很可能已经发出该请求(您必须已加载页面才能执行 AJAX 请求)。
  3. 据我所知,没有服务器端“最佳实践”来减少这些请求的数量。但是,您可以通过在文档头部显式包含
    <link ref="icon" ... />
    语句来修改向客户端提供的模板(或 HTML 文件)。

0
投票
http.createServer((req, res) => {
    if (req.url!="/favicon.ico")
        console.log(req.url);
}).listen(8000);
© www.soinside.com 2019 - 2024. All rights reserved.