new Image()。src =“same url”编码两次,但浏览器只能捕获一个请求

时间:2017-08-16 09:48:53

标签: javascript google-chrome httprequest

查看以下代码。 Chrome会在调试控制台中记录一个请求。如果这是因为缓存,为什么它不记录两个请求,最后一个是304?

是什么解释了这种浏览器行为?

<script>
     new Image().src="//stackoverflow.com/"
     new Image().src="//stackoverflow.com/"
</script>

2 个答案:

答案 0 :(得分:3)

浏览器已经下载了图片,为什么要再次请求同一张图片?如果图像在页面上多次使用(定期发生),则对每个实例使用单独的请求会产生大量不必要的开销。假设同一页面中具有相同URL的两个图像是相同的图像。

答案 1 :(得分:2)

您要求两次相同的图像。该行为实际上在HTML5规范中描述。引用:

  

如果资源由绝对URL标识,并且资源是   使用幂等操作(例如HTTP GET或   等效),并且由于其他原因已经下载了   (例如,此算法的另一个调用),此请求将是   与前一个相同(例如,同一AcceptOrigin   标题),并且配置用户代理以使其重用   来自现有下载的数据而不是启动新数据,   然后使用现有下载的结果而不是开始   新的。

HTML5 > Common infrastructure > Fetching resources > Processing model

基本上它说如果你多次请求完全相同的资源,浏览器只会下载一次(或者根本不下载它而是从缓存中提供)。

相反规格的相关规格: