为什么节点会听到两个请求? (网站图标)
Why does node hear two requests? (Favicon)
我试着做一个简单的 API。如果 someone/something 查询:
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
我想这意味着请求客户端会自动绘制一个额外的请求,希望加载 favicon 以及实际页面。
这个假设是否正确?
在提出请求时我可以做些什么来防止这种情况发生?它是由 chrome 驱动的还是如果我使用 ajax 查询页面也会发生?
在服务器端以最少的浪费过滤掉网站图标请求的最佳做法是什么?
- 你的假设是正确的。如果在 HTML 正文的头部没有指定为
<link rel="icon" ... />
的图标,大多数浏览器会在首次访问网站时发出 GET /favicon.ico
。
- 不,这是客户端(浏览器)端实现的功能。您无能为力 server-side 来阻止这种行为。如果通过 AJAX 发出请求,浏览器将不会向
/favicon.ico
发出额外请求,但很可能此时浏览器已经发出该请求(您必须已将页面加载到执行 AJAX 请求)。
- 据我所知,没有 server-side "best practices" 可以减少这些请求的数量。但是,您可以通过在文档头部显式包含
<link ref="icon" ... />
语句来修改为客户端提供的模板(或 HTML 文件)。
我试着做一个简单的 API。如果 someone/something 查询:
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
我想这意味着请求客户端会自动绘制一个额外的请求,希望加载 favicon 以及实际页面。
这个假设是否正确?
在提出请求时我可以做些什么来防止这种情况发生?它是由 chrome 驱动的还是如果我使用 ajax 查询页面也会发生?
在服务器端以最少的浪费过滤掉网站图标请求的最佳做法是什么?
- 你的假设是正确的。如果在 HTML 正文的头部没有指定为
<link rel="icon" ... />
的图标,大多数浏览器会在首次访问网站时发出GET /favicon.ico
。 - 不,这是客户端(浏览器)端实现的功能。您无能为力 server-side 来阻止这种行为。如果通过 AJAX 发出请求,浏览器将不会向
/favicon.ico
发出额外请求,但很可能此时浏览器已经发出该请求(您必须已将页面加载到执行 AJAX 请求)。 - 据我所知,没有 server-side "best practices" 可以减少这些请求的数量。但是,您可以通过在文档头部显式包含
<link ref="icon" ... />
语句来修改为客户端提供的模板(或 HTML 文件)。