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

Eye*_*Eye 7 browser networking google-chrome http request

我创建了一个简单的 Node.js 应用程序,它记录request.url每个传入 HTTP 请求的当前信息。当我在 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=' }
Run Code Online (Sandbox Code Playgroud)

这是第二个请求。这一次它接受一切

{ 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=' }
Run Code Online (Sandbox Code Playgroud)

编辑 2:我已经检查并看到两个请求都是GET请求。

Jam*_*e H 5

我认为这与Chrome 中的这个错误有关,它在每个请求上都发送对网站图标的请求。Firefox 和其他浏览器会在第一次请求时执行此操作,但会对其进行缓存。