【问题标题】:Why does node hear two requests? (Favicon)为什么节点会听到两个请求? (网站图标)
【发布时间】:2017-05-31 21:01:57
【问题描述】:

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

myIP:port/query

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

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

它打印两个请求 url:

  • /查询
  • /favicon.ico

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

  • 这个假设正确吗?

  • 在提出请求时我能做些什么来防止这种情况发生?它是由chrome驱动的还是如果我使用ajax查询页面也会发生?

  • 在服务器端过滤掉网站图标请求的最佳实践是什么?

【问题讨论】:

  • 你...似乎已经知道为什么会有两个请求,显而易见的解决方案是要么忽略 favicon 请求及其引起的任何错误,要么让服务器响应它。
  • 这不能解决我的问题。
  • 那你的问题到底是什么?如果您正在寻找“最佳做法”,那么您就找错了网站系列。

标签: ajax node.js google-chrome favicon


【解决方案1】:
  1. 您的假设是正确的。大多数浏览器在首次访问网站时,如果 HTML 正文头部没有指定为 <link rel="icon" ... /> 的网站图标,则会发出 GET /favicon.ico
  2. 不,这是客户端(浏览器)端实现的功能。您无法在服务器端执行任何操作来防止这种行为。如果请求是通过 AJAX 发出的,浏览器不会向 /favicon.ico 发出额外的请求,但很可能此时浏览器已经发出了该请求(您必须加载页面才能执行 AJAX 请求)。
  3. 据我所知,没有用于减少这些请求数量的服务器端“最佳实践”。但是,您可以通过在文档头部显式包含 <link ref="icon" ... /> 语句来修改您提供给客户端的模板(或 HTML 文件)。

【讨论】:

    猜你喜欢
    • 2020-12-31
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 2020-03-20
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    相关资源
    最近更新 更多