为什么浏览器在刷新时会为同一页面发送两个请求?

时间:2013-02-07 14:11:22

标签: http google-chrome networking browser request

我创建了一个简单的Node.js应用程序,该应用程序会记录每个传入HTTP请求的当前request.url。当我在Mac OS X ML上刷新Chrome页面时,我会收到两个同一页面的请求。的为什么吗

相比之下,当我使用 curl 并请求同一页面时,我只收到一个请求。如果我在Safari中刷新页面,则同一个请求。

为什么Chrome会针对同一页面发送两个请求?

修改:我查看了request.headers,发现了一个区别:accept标题。

这是第一个请求的标头。请注意,它接受特定mime的列表。

{ host: 'www.pulsr.local:1337',
  connection: 'keep-alive',
  'cache-control': 'max-age=0',
  accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',
  'accept-encoding': 'gzip,deflate,sdch',
  'accept-language': 'en-US,en;q=0.8',
  'accept-charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
  cookie: 'PULSRSESSID=BBtDAWMVgbQZ8lXA6wv4Wg/vwwI=; PULSRSESSID=dsGxP494UxJueit2/u79AFiM5fw=' }

这是第二个请求。这次接受所有内容

{ host: 'www.pulsr.local:1337',
  connection: 'keep-alive',
  'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',
  accept: '*/*',
  'accept-encoding': 'gzip,deflate,sdch',
  'accept-language': 'en-US,en;q=0.8',
  'accept-charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
  cookie: 'PULSRSESSID=VGWRSG9zIokHjA2vLa1b+/fUqu8=; PULSRSESSID=dsGxP494UxJueit2/u79AFiM5fw=' }

修改2 :我已查看并看到这两个请求都是GET次请求。

4 个答案:

答案 0 :(得分:3)

我认为这与Chrome中的bug有关,它会在每次请求时发送对favicon的请求。 Firefox和其他浏览器会在第一次请求时执行此操作,但会对其进行缓存。

答案 1 :(得分:1)

在另一个answer中找到,可能是由图片或iframe上的空src属性引起的。我遇到了同样的问题:Chromium在完全相同的页面上有4个请求 - 而不是在favicon上 - 只做了1页刷新。在我的情况下,我发现这是由href标记上的空link属性引起的:

<link rel="shortcut icon" href="" />
<link rel="icon" type="image/x-icon" href="" />
<link rel="icon" type="image/png" href="" />

因此,我的页面重新加载1请求,以及上述3个链接中的每一个的1个请求。

答案 2 :(得分:0)

请注意Chrome ..上的萤火虫灯扩展名,这是我的问题

答案 3 :(得分:0)

就我而言,带有 src="#" 的 iframe 导致页面打开两次

<iframe src="#" class="iframe lazyload" id="youtube-player-iframe" allow="autoplay"></iframe>